본문 바로가기
Unity

[Unity] Assert Class는 개발 빌드에서만 동작한다.

by kkkdh 2024. 11. 11.
728x90

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에 대한 설명

 

Unity - Scripting API: Assert

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. Assert throws exceptions whenever

docs.unity3d.com

 


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

  1. https://docs.unity3d.com/kr/2022.3/ScriptReference/Assertions.Assert.html
  2. https://haseungbong.blogspot.com/search/label/UNITY_ASSERTIONS?m=0
  3. https://rito15.github.io/posts/unity-editor-define-symbol/
728x90

댓글