Unity 개발 중에 에디터에서만 실행되도록 코드를 작성해야 하는 경우가 종종 있습니다.
대표적으로 디버깅, 에디터 전용 API 호출이 그러한 예인데요. 이때 사용할 수 있는 두 가지 방법이 있습니다.
바로 [Conditional("UNITY_EDITOR")] 특성과 전처리기 지시문 #if UNITY_EDITOR … #endif 입니다.
이번 글에서는 두 방법의 동작 방식을 비교해보고, 어떤 상황에서 어떤 방식을 선택하는 것이 좋은지 알아보겠습니다.
[Conditional("UNITY_EDITOR")] 특성
[Conditional("UNITY_EDITOR")]는 System.Diagnostics 네임스페이스에 정의된 특성입니다.
이 특성이 적용된 메서드의 호출은 컴파일 시점에 조건 심볼(여기서는 UNITY_EDITOR)이 정의되어 있지 않으면 호출 자체가 제거됩니다.
[Conditional("UNITY_EDITOR")]
public static void LogColor(this string message, Color color)
{
string colorString = ColorUtility.ToHtmlStringRGB(color);
Debug.Log($"<color=#{colorString}>{message}</color>");
}
#if UNITY_EDITOR … #endif 전처리기 지시문
전처리기 지시문인 #if UNITY_EDITOR … #endif는 해당 코드 블록 전체를 컴파일 시 포함할지 말지를 결정합니다.
즉, 조건이 충족되지 않으면 코드 블록 자체가 빌드 결과에 전혀 포함되지 않습니다.
#if UNITY_EDITOR
using UnityEditor;
#endif
public void DoEditorOnlyStuff()
{
#if UNITY_EDITOR
EditorUtility.DisplayDialog("Title", "This is editor only!", "OK");
#endif
}