C# 지시문을 사용하면 특정 스크립팅 심볼이 정의됨 또는 정의되지 않음에 따라 컴파일에서 코드를 선택적으로 포함하거나 제외할 수 있습니다.
빌트인 스크립팅 심볼(플랫폼, 에디터 버전, 기타 관련 기타 시스템 환경 시나리오), 에디터 UI를 사용하거나 스크립팅을 통해 또는 에셋 파일을 통해 고유한 커스텀 스크립팅 심볼을 지정할 수 있습니다.
에디터를 통해 정의 지시문을 설정하거나 제거하려면 Edit > Project Settings > Player로 이동한 다음 Other Settings 패널에서 Script Compilation까지 아래로 스크롤합니다.
+, - 버튼을 사용하고 필드에 새 심볼의 이름을 입력하여 Scripting Define Symbols 리스트에 커스텀 스크립팅 심볼을 추가 및 제거할 수 있습니다. Apply를 선택하면 새 스크립팅 심볼이 적용되고 Unity는 이러한 새 심볼을 사용하여 프로젝트의 스크립트를 다시 컴파일합니다.
Copy Defines 버튼은 리스트에서 현재 커스텀 스크립팅 심볼 세트를 세미콜론으로 구분된 문자열 값으로 클립보드에 복사합니다.
다음 API를 사용하여 스크립팅 심볼을 정의할 수 있습니다.
에디터 스크립트가 변경 사항의 영향을 받도록 에디터에서 스크립트를 통해 스크립팅 심볼을 정의해야 하는 경우 PlayerSettings.SetScriptingDefineSymbolsForGroup을 사용해야 합니다. 그러나 이 메서드의 작동에 대해 주의해야 할 몇 가지 중요한 세부 사항이 있습니다.
중요: 이 메서드는 즉시 적용되지 않습니다. 스크립트에서 이 메서드를 호출해도 즉시 적용되지 않고 스크립트를 다시 컴파일하지도 않습니다. 스크립팅 심볼의 변경 사항에 따라 지시문이 영향을 받도록 하려면 컨트롤이 에디터로 반환되도록 허용해야 합니다. 그러면 에디터에서 스크립트를 비동기식으로 다시 로드하고 새 심볼과 새 심볼에 작용하는 지시문을 기반으로 다시 컴파일합니다.
예를 들어 에디터 스크립트에서 이 메서드를 사용하는 경우 동일한 스크립트의 다음 줄에서 즉시 BuildPipeline.BuildPlayer
를 호출합니다. 이 시점에서 Unity는 여전히 이전 스크립팅 심볼 세트로 에디터 스크립트를 실행하고 있습니다. 즉 BuildPlayer 실행의 일부로 실행되는 에디터 스크립트가 있는 경우 이전 스크립팅 심볼로 실행되어 플레이어가 예상대로 빌드하지 못할 수도 있습니다.
CI(지속적 통합) 서버의 Unity 에디터에서 배치 모드로 실행되는 에디터 스크립트를 작성하는 경우에도 위에서 언급한 Unity 컴파일의 비동기적 특성을 숙지하는 것이 중요합니다. 에디터가 배치 모드에서 실행될 때 “헤드리스”를 실행하므로 새 스크립팅 심볼로 다시 컴파일되는 editor loop가 발생하지 않습니다. 이로 인해 스크립트가 다시 컴파일되지 않고 적용되지도 않기 때문에 에디터 스크립트를 사용하여 배치 모드 CI 서버 내에서 스크립팅 심볼을 설정하면 안됩니다.
대신 배치 모드에서 실행되는 에디터에서 특정 심볼을 정의해야 하는 경우 처음부터 정의된 올바른 심볼로 에디터가 실행되는지 확인해야 합니다. 아래 설명된 대로 에디터 스크립트를 사용하는 대신 csc.rsp 에셋 파일을 사용하여 심볼을 지정하면 확인할 수 있습니다.
프로젝트의 텍스트 에셋을 통해 커스텀 스크립팅 심볼을 설정할 수 있습니다. 이렇게 하려면 프로젝트의 Assets 폴더 루트에 csc.rsp
라는 커스텀 스크립팅 심볼을 정의하는 텍스트 파일을 추가해야 합니다. 이 특수 파일은 시작 시 Unity에서 읽고 코드가 컴파일되기 전에 적용됩니다.
예를 들어 csc.rsp 파일에 -define:UNITY_DEBUG 한 줄을 포함할 경우 UNITY_DEBUG 심볼이 에디터 스크립트의 경우를 제외하고는 C# 스크립트에 대한 전역적으로 정의된 스크립팅 심볼로 포함됩니다.
.rsp 파일을 변경할 때마다 다시 컴파일해야 해당 파일이 유효합니다. 하나의 스크립트 파일을 업데이트하거나 다시 임포트를 하면 됩니다.
참고: 글로벌 스크립팅 심볼만 수정하고 싶을 경우 플레이어 설정 창을 통해 에디터의 Scripting Define Symbols에 (위에서 설명한 대로) 추가합니다. 이 설정이 모든 컴파일러를 다루기 때문입니다. 대신 .rsp 파일을 선택할 경우에는 Unity에서 사용하는 모든 컴파일러에 해당하는 하나의 파일을 제공해야 합니다.