[Unity] 전처리 지시문(Unity 용)

Learning 

When: 1학년 6월 13일

 

How:

전에 눈이 내리는 에셋을 사용해 본 적이 있는데, 그 에셋을 사용하면서 눈이 내리는 범위를 씬에서 네모난 형태로 보여주었습니다. 그때는 이런 기능이 있다는 것만 생각했었는데, 개인 프로젝트를 하면서 어떠한 범위 안에서 랜덤 위치로 적이 스폰하는 시스템을 만들다가 계속 직렬화 변수로 바꿔서 게임을 실행하는 것이 귀찮아서 저번에 본 씬에서 보이는 형태로 만들게 되며 공부를 하게 되었습니다.

 

Understanding:

일단 전처리 지시문은 C#에서 컴파일 전에 미리 읽고 처리하는 명령인데, 유니티에서는 에디터에서만 실행되는 전처리 지시문, 안드로이드 플랫폼에서 실행되는 전처리 지시문 등 다양한 특수 상수를 만들어서 쓸 수 있게 해주었습니다.

#if UNITY_EDITOR
	using UnityEditor;
	
	void OnDrawGizmos() {
	    Handles.Label(transform.position, "스폰지점");
	} //대충 씬에 글자 띄우는 코드
#endif

이렇게 #if 뒤에 유니티가 만들어준 에디터에서 실행되는 전처리 상수인 UNITY_EDITOR를 쓴다면 에디터에서 실행되는 코드를 짤 수 있습니다. 그런데 여기서 굳이 UNITY_EDITOR 전처리 지시문을 사용하지 않아도 OnDrawGizmos 메서드는 씬에서 계속 호출됩니다. 하지만 문제는 Handles.Label인데, 이 메서드는 UnityEditor 네임스페이스에 있기 때문에 이것이 없으면 오류가 날 것입니다. 그리고 UnityEditor는 런타임 환경(빌드 대상)에 포함되지 않기 때문에 using UnityEditor 같은 구문은 전처리 지시문으로 감싸서 빌드 대상에서는 제외해주어야 합니다.

 

 

유니티가 지원하는 정처리 상수

Unity 전처리 상수 실행 플랫폼
UNITY_EDITOR 에디터
UNITY_ANDROID 안드로이드
UNITY_IOS iOS
UNITY_WEBGL WebGL
UNITY_STANDALONE_WIN Window 개발 빌드
DEVELOPMENT_BUILD 개발 빌드

 

Result: 에디터에서만 사용할 수 있는 함수도 있으니 유의하여 전처리 지시문을 잘 사용하면 빌드본에서 버그가 생기는 일을 줄일 수 있습니다.