# カスタム製スクリプトシンボル

> 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) に加えて、独自のカスタムスクリプトシンボルを定義できます。カスタムスクリプトシンボルをどこで定義するかによって、その適用範囲が決まります。カスタムシンボルは、以下の場所で定義できます。

* [アセットファイル](#asset) では、アクティブな [ビルドプロファイル](/engine/6000.0/manual/unity-editor/editor-features/build-settings/build-profiles.md) に関係なく、プロジェクト内のすべてのエディターとプレイヤーのコードに適用されるシンボルを定義します。
* [プレイヤー設定](#player-settings) では、特定のプラットフォームまたはそのビルドプロファイルの 1 つがアクティブなときに、すべてのエディターとプレイヤーのコードに適用されるシンボルを定義します。
* [ビルドプロファイル](#build-profile) では、特定のビルドプロファイルがアクティブなときに、すべてのエディターとプレイヤーのコードに適用されるシンボルを定義します。
* [コードから](#code) は、使用する API に応じて、アクティブなプラットフォームまたは個々のプレイヤービルドに適用されるシンボルを定義します。

## プロジェクト全体のカスタムシンボル##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:` で始まり、その後にセミコロンで区切られた 1 つまたは複数のスクリプトシンボルが続きます。

Unity はこのファイルを起動時に読み取り、コードをコンパイルする前に適用します。例えば、`csc.rsp` ファイルに 1 行の `-define:UNITY_DEBUG;UNITY_TEST` を入力すると、シンボル `UNITY_DEBUG` と `UNITY_TEST` は、プロジェクト内のすべての C# スクリプトに対してグローバルに定義されたスクリプトシンボルとして追加されます。

**注**:`.rsp` ファイルへの変更は、Unity がスクリプトを再コンパイルするまで有効になりません。1 つのスクリプトファイルを更新または再インポートすることによって、再コンパイルをトリガーすることができます。

## プラットフォームのカスタムシンボル##custom-symbols-for-a-platform

プラットフォーム固有のカスタムスクリプトシンボルは、以下のように定義できます。

1. [Player 設定](/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 設定](#player-settings) でプラットフォーム固有のスクリプトシンボルを設定するコードに相当するものです。

**重要**: `SetScriptingDefineSymbols` を使用してコードから作成したシンボルは、エディターがコントロールを取り戻してスクリプトを再コンパイルするまで有効になりません。例えば、エディタースクリプトで `SetScriptingDefineSymbols` を使用してスクリプトシンボルを作成してから、次の行で `BuildPipeline.BuildPlayer` を呼び出すと、前の行で作成した新しいシンボルはまだ有効になっていません。この場合、`BuildPlayer` の実行の一部として実行されるエディターコードは、新しいシンボルなしで実行され、プレイヤーは意図したとおりにビルドされない可能性があります。

### バッチモードでのカスタムシンボル##custom-symbols-in-batch-mode

エディターをバッチモードで実行する場合、スクリプトの再コンパイルをトリガーするメカニズムはありません。バッチモードで実行するエディターで、特定のシンボルを定義する必要がある場合は、[csc.rsp アセットファイルを使用](#asset) して、シンボルが起動時から適用されるようにする必要があります。

## スクリプトシンボルの継承##scripting-symbol-inheritance

カスタムスクリプトシンボルを複数の場所で定義すると、Unity は現在のビルド設定に適用されるすべてのシンボルを集約します。シンボルは上書きされるのではなく、プロジェクト全体のシンボル (`csc.rsp` から) + プラットフォーム固有のシンボル (Player 設定から) + ビルドプロファイルのシンボル (ビルドデータから) というように、各範囲から継承されます。プラットフォームのシンボルとビルドプロファイルのシンボルは、アクティブなビルドプロファイルと一致する場合にのみ追加されます。

例えば、以下の場所に以下のカスタムスクリプトシンボルが定義されているとします。

| **保存場所**             | **定義されたシンボル** |
| -------------------- | ------------- |
| `csc.rsp`            | `SYMBOL_A`    |
| Windows の Player 設定  | `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)
