UnityEngine namespace에는 Assert라는 클래스가 존재합니다.
이름에서 알 수 있다시피, Assertion method를 제공하기 위한 클래스인데요,
Assert Method (단정 메서드)를 이용하면, 특정 표현식이 런타임 중 true인지 여부를 판정할 수 있습니다.
using UnityEngine;
using UnityEngine.Assertions;
public class AssertionExampleClass : MonoBehaviour
{
public int health;
public GameObject go;
void Update()
{
// check the inequality between 0 and health
Assert.AreNotEqual(0, health);
// check if go.activeInHierarchy is true
Assert.IsTrue(go.activeInHierarchy);
}
}
Unity Documentation에서 가져온 예제는 위와 같고, 직관적인 메서드의 이름 덕분에 인터페이스만 쭉 훑어보면 누구나 쉽게 가능할 것 같습니다.
오늘은 Assert Class 사용 방법 보다는 사용하면서, 겪은 문제를 해소했던 과정을 간략히 정리하려 합니다.
따라서 class에 있는 method들에 대한 자세한 정보는 아래 링크의 유니티 공식 문서를 참고해 주세요 😀
➡️ Unity 6 기준 Assert Class에 대한 설명
Assert Class는 개발 빌드에서만 역할을 수행합니다.
공식 문서를 보면 다음과 같은 설명이 있는데요,
All method calls will be conditionally included only in a development build, unless specified explicitly. See BuildOptions.ForceEnableAssertions. The inclusion of an assertion is controlled by the UNITY_ASSERTIONS define.
요약하자면.. 저 UNITY_ASSERTION이라는 전처리기 지시어가 유효한 경우에만, 호출되고
해당 전처리기 지시어는 development build에만 포함됨을 말하고 있습니다.
Unity Editor를 이용해 프로그램을 실행할 때에는 UNITY_ASSERTIONS를 유니티가 C# 프로젝트 파일 생성 시점에 속성을 강제로 주입하기 때문에, Assert Class가 잘 동작하지만
Unity Standalone build나 AOS, iOS type build를 development build로 설정하지 않은 채로 빌드하면, Assert Class는 동작을 하지 않습니다.
Build Settings > Development Build 항목을 체크하시면 개발 빌드로 빌드 생성이 가능합니다.
저는 개발 빌드로 바꿔도 여전히 Android Build에서 Assert class가 동작하지 않아,
설명에 작성된 UNITY_ASSERTIONS라는 전처리기 지시어를 추가해 주고 나서야 정상 동작했습니다.
좀 더 찾아보면 결과 Development Build 세팅만 해주면, UNITY_ASSERTIONS 전처리자를 Unity가 프로젝트에 포함시켜줘서 Assert Class가 제대로 동작하는 것 같습니다.
아마도 저는 테스트해 본 프로젝트가 빌드되는 과정에서 해당 설정이 풀리거나 한 것 같아 다시 한 번 확인해봐야 하지 않을까 싶네요..
UNITY_ASSERTIONS 전처리기 지시어 추가
추가하려면, Player Settings > Other Settings > Scrpting Define Symbols에 다음과 같이 UNITY_ASSERTIONS를 추가해 주면 됩니다.
2021.3.40f1 버전 기준 세팅 화면입니다.
생각 정리
Development Build가 아닌 build에서는 Assert Class 동작하지 않음을 유의하자.
따라서 디버깅 용도로만, Assert Class를 사용해야 한다.
Unity Editor로만 디버깅을 할 것이라면, 신경 쓰지 않고 Assert Class를 사용해도 좋을 것 같다.
하지만, AOS나 Android 또는 Unity Standalone 빌드에서 디버깅을 하는 경우(거의 없겠으나) 주의해야 할 것 (별도로 개발 빌드로 설정해줘야 하니깐)
어떤 빌드에서나 사용하고 싶은 경우 위의 설정을 별도로 해주면 된다.
물론 Editor에서 하지 않고, 코드 기반으로 설정할 수도 있을 것이다.
Reference
'Unity' 카테고리의 다른 글
[Unity] Android Studio로 개발한 라이브러리를 포함해서 패키징 하는 경우 (0) | 2024.11.13 |
---|---|
Perplexity를 이용한 Unity 게임 엔진의 원리 이해 (1) | 2024.10.15 |
댓글