# 커스텀 스크립팅 심볼

> Create your own custom scripting symbols via the Editor UI, from scripts, or with an asset file.

Unity의 [빌트인 스크립팅 심볼](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation/conditional-compilation/symbol-reference.md) 외에도 커스텀 스크립팅 심볼을 정의할 수 있습니다. 커스텀 스크립팅 심볼을 정의하는 위치에 따라 해당 심볼이 적용되는 범위가 결정됩니다. 다음 위치에서 커스텀 심볼을 정의할 수 있습니다.

* 활성화된 [빌드 프로파일](/engine/6000.0/manual/unity-editor/editor-features/build-settings/build-profiles.md)에 관계없이 프로젝트의 모든 에디터 및 플레이어 코드에 적용되는 심볼의 경우, [에셋 파일](#asset)
* 특정 플랫폼 또는 해당 빌드 프로파일 중 하나가 활성화될 때 모든 에디터 및 플레어 코드에 적용되는 심볼의 경우, [플레이어 설정](#player-settings)
* 특정 빌드 프로파일이 활성화될 때 모든 에디터 및 플레이어 코드에 적용되는 심볼의 경우, [빌드 프로파일](#build-profile)
* 사용되는 API에 따라 활성 플랫폼에 적용되는 심볼 또는 개별 플레이어 빌드의 경우, [코드에서](#code) 정의

## 전체 프로젝트에 대한 커스텀 심볼##custom-symbols-for-the-whole-project

다음과 같이 전체 프로젝트에 적용되는 커스텀 스크립팅 심볼을 [응답 파일](https://learn.microsoft.com/en-us/visualstudio/msbuild/msbuild-response-files?view=vs-2022) 에셋으로 정의할 수 있습니다.

1. 파일 `csc.rsp`의 이름을 지정하고 프로젝트의 **Assets** 폴더 루트에 넣습니다.
2. `-define:`으로 시작하는 줄에 스크립팅 심볼을 정의한 후 세미콜론으로 구분된 스크립팅 심볼을 하나 이상 지정합니다.

Unity는 시작 시 이 파일을 읽고 코드를 컴파일하기 전에 적용합니다. 예를 들어 `csc.rsp` 파일에 `-define:UNITY_DEBUG;UNITY_TEST` 줄 하나를 포함하는 경우 `UNITY_DEBUG` 및 `UNITY_TEST` 심볼은 프로젝트의 모든 C# 스크립트에 전역 정의된 스크립팅 기호로 포함됩니다.

**참고**: Unity가 스크립트를 다시 컴파일하기 전에는 `.rsp` 파일에 대한 변경 사항이 적용되지 않습니다. 단일 스크립트 파일을 업데이트하거나 다시 임포트하여 재컴파일을 트리거할 수 있습니다.

## 플랫폼용 커스텀 심볼##custom-symbols-for-a-platform

다음과 같이 플랫폼별 커스텀 스크립팅 심볼을 정의할 수 있습니다.

1. [Player settings](/engine/6000.0/manual/unity-editor/editor-features/comp-manager-group/class-player-settings.md)를 엽니다.
2. **Other Settings** > **Script Compilation** 섹션의 **Scripting Define Symbols** 목록으로 이동합니다.
3. **+** 버튼을 선택하고 텍스트 필드에 심볼 이름을 입력하여 목록에 새 스크립팅 심볼을 추가합니다. 기존 목록 항목을 **-** 버튼으로 제거합니다.
4. 목록 편집을 마치면 **Apply**를 선택하여 변경 사항을 적용합니다. 그러면 Unity가 새 심볼을 사용하여 프로젝트의 스크립트를 다시 컴파일합니다.

**참고**: **Copy Defines** 버튼을 누르면 목록의 현재 커스텀 스크립팅 심볼 세트를 세미콜론으로 구분된 문자열 값으로 클립보드에 복사합니다.

## 빌드 프로파일의 커스텀 심볼##custom-symbols-for-a-build-profile

다음과 같이 빌드 프로파일에 대한 커스텀 스크립팅 심볼을 정의할 수 있습니다.

1. [Build Profiles 창](/engine/6000.0/manual/unity-editor/editor-features/build-settings/build-profiles-reference.md)에서 심볼을 정의할 빌드 프로파일을 선택합니다.
2. **Build Data** 섹션의 **Scripting Defines** 목록으로 이동합니다.
3. **+** 버튼을 선택하고 텍스트 필드에 심볼 이름을 입력하여 목록에 새 스크립팅 심볼을 추가합니다. 기존 목록 항목을 **-** 버튼으로 제거합니다. 그러면 목록의 수정 사항이 저장되어 자동으로 적용됩니다.

**참고**: `-activeBuildProfile` [커맨드 라인 인자](/engine/6000.0/manual/unity-editor/editor-features/command-line-arguments/editor.md)를 사용해 에디터를 실행하여 지정한 빌드 프로파일과 커스텀 스크립팅 심볼을 시작할 때부터 적용할 수 있습니다.

## 코드로 정의된 커스텀 심볼##custom-symbols-defined-from-code

다음 API를 사용하여 스크립팅 심볼을 정의할 수 있습니다.

* [`PlayerSettings.SetScriptingDefineSymbols`](/engine/6000.0/script-reference/unity-editor/player-settings/set-scripting-define-symbols.md)
* [`BuildPlayerOptions.extraScriptingDefines`](/engine/6000.0/script-reference/unity-editor/build-player-options/extra-scripting-defines.md)
* [`Build.Player.ScriptCompilationSettings-extraScriptingDefines`](/engine/6000.0/script-reference/unity-editor-build-player/script-compilation-settings/extra-scripting-defines.md)

`BuildPlayerOptions.extraScriptingDefines` 및 `Build.Player.ScriptCompilationSettings-extraScriptDefines`는 플레이어 빌드에만 적용되므로 에디터 스크립트에 적용되는 스크립팅 심볼을 정의할 때는 [`PlayerSettings.SetScriptingDefineSymbols`](/engine/6000.0/script-reference/unity-editor/player-settings/set-scripting-define-symbols.md)를 사용하십시오. 이는 [플레이어 설정](#player-settings)에서 플랫폼별 스크립팅 심볼을 설정하는 코드와 동일한 코드입니다.

**중요**: `SetScriptingDefineSymbols`가 있는 코드로 생성된 심볼은 에디터가 다시 제어할 수 있게 되고 스크립트를 다시 컴파일할 때까지 적용되지 않습니다. 예를 들어 에디터 스크립트에서 `SetScriptingDefineSymbols`로 스크립팅 심볼을 생성한 후 다음 줄에서 `BuildPipeline.BuildPlayer`를 호출하는 경우 이전 줄에서 생성된 새로운 심볼은 아직 적용되지 않습니다. 이 경우 `BuildPlayer` 실행의 일환으로 실행되는 에디터 코드는 새 심볼 없이 실행되며 플레이어가 의도한 대로 빌드하지 않을 수 있습니다.

### 배치 모드의 커스텀 심볼##custom-symbols-in-batch-mode

에디터가 배치 모드로 실행될 때는 스크립트 리컴파일을 트리거하는 메커니즘이 없습니다. 배치 모드에서 실행되는 에디터에서 특정 심볼을 정의해야 하는 경우 시작할 때부터 [csc.rsp 에셋 파일을 사용](#asset)하여 해당 심볼이 존재해야 합니다.

## 스크립팅 심볼 상속##scripting-symbol-inheritance

커스텀 스크립팅 심볼을 여러 위치에 정의하면 Unity는 현재 빌드 설정에 적용되는 모든 심볼을 합칩니다. 심볼을 덮어쓰지 않고 각 범위에서 상속받습니다( 프로젝트 전체 심볼(`csc.rsp`)+플랫폼별 심볼(플레이어 설정)+빌드 프로파일 심볼(빌드 데이터)). 플랫폼 및 빌드 프로파일 심볼은 활성 빌드 프로파일과 일치하는 경우에만 포함됩니다.

예를 들어 프로젝트에 다음 위치에 정의된 커스텀 스크립팅 심볼이 있다고 가정해 보겠습니다.

| **위치**               | **정의된 심볼** |
| -------------------- | ---------- |
| `csc.rsp`            | `SYMBOL_A` |
| Windows 플레이어 설정      | `SYMBOL_B` |
| WindowsBuildProfile1 | `SYMBOL_C` |
| WindowsBuildProfile2 | `SYMBOL_D` |

이 예시 설정에 따라 다음 표에는 다양한 빌드 프로파일이 활성화될 때 에디터와 플레이어 코드에 대해 활성화되는 심볼이 나와 있습니다.

| **활성 빌드 프로파일**       | **활성 심볼**                          |
| -------------------- | ---------------------------------- |
| Android              | `SYMBOL_A`                         |
| Windows              | `SYMBOL_A`, `SYMBOL_B`             |
| WindowsBuildProfile1 | `SYMBOL_A`, `SYMBOL_B`, `SYMBOL_C` |
| WindowsBuildProfile2 | `SYMBOL_A`, `SYMBOL_B`, `SYMBOL_D` |

코드에서 `#if` 지시문으로 이러한 동작을 테스트할 수 있습니다. 자세한 내용은 [테스트 조건부 컴파일](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation/conditional-compilation/test.md)을 참조하십시오.

## 추가 리소스##additional-resources

* [Unity 스크립팅 심볼 레퍼런스](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation/conditional-compilation/symbol-reference.md)
* [추가 클래스 라이브러리 어셈블리 레퍼런스](/engine/6000.0/manual/scripting/environment-and-tools/overview-of-dot-net-in-unity/dotnet-profile-assemblies.md)
