C# ディレクティブ によって、特定の スクリプトシンボル が 定義されている か 定義されていないか によって、選択的にコードをコンパイルに入れたり除外したりする ことができます。
ビルトインのスクリプトシンボル (プラットフォーム、エディターバージョン、その他 のシステム環境のシナリオに関連) に加えて、エディター UI、スクリプト、またはアセットファイルを使って、独自のカスタムスクリプトシンボルを指定することができます。
エディターで define ディレクティブを設定または削除するには、Edit > Project Settings > Player に移動します。次に、 Other Settings パネルで Script Compilation までスクロールダウンします。
Scripting Define Symbols リストに独自のカスタムのスクリプトシンボルを追加/削除するには、+ または - ボタンを使用して、フィールドに新しいシンボルの名前を入力します。 Apply を選択すると、新しいスクリプトシンボルが適用され、Unity はこれらの新しいシンボルを使用してプロジェクト内のスクリプトを再コンパイルします。
Copy Defines ボタンは、使用中のカスタムスクリプトシンボル群を、セミコロンで区切られた値の文字列としてリストからクリップボードにコピーします。
スクリプトシンボルを定義するために、以下の API を使用できます。
エディターでスクリプトを使用してスクリプトシンボルを定義する必要があるため、エディタースクリプトがその影響を受ける場合、PlayerSettings.SetScriptingDefineSymbolsForGroup を使用する必要があります。ただし、この操作方法にはいくつかの重要な注意点があります。
重要: このメソッドは即座に反映されません。スクリプトからこのメソッドを呼び出しても、スクリプトはすぐに適用されず、再コンパイルされます。スクリプトシンボルの変更に基づくディレクティブを有効にするには、エディターに制御を戻す必要があります。そうすると、エディターは非同期にスクリプトを再ロードし、新しいシンボルとそれに作用するディレクティブに基づいて再コンパイルします。
例えば、エディタースクリプトでこのメソッドを使用した後、すぐに同じスクリプトの次の行で BuildPipeline.BuildPlayer
を呼び出すと、その時点ではまだ新しいシンボルで再コンパイルされていないため、Unityは古いスクリプトシンボルのセットでエディタースクリプトを実行しています。つまり、BuildPlayer の実行の一部として実行されるエディタースクリプトがある場合、これらは古いスクリプトシンボルで実行されるため、プレイヤーは期待通りにビルドされないかもしれません。
前述の Unity のコンパイルの非同期性は、もし、継続的インテグレーション (CI) サーバー上の Unity エディターでバッチモードで実行されるエディタースクリプトを書く場合には、理解しておく必要がありあます。なぜなら、エディターがバッチモードで実行されるとき、“ヘッドレス” を実行するため、新しいスクリプトシンボルで再コンパイルさせる エディターループ が存在しなくなるからです。このため、エディタスクリプトを使用して、バッチモードの CI サーバーでスクリプトシンボルを設定するべきではありません。スクリプトは再コンパイルされないので、スクリプトシンボルは適用されないからです。
代わりに、バッチモードで実行するエディターで特定のシンボルを定義する必要がある場合は、最初から正しいシンボルが定義された状態でエディターが起動するようにする必要があります。これは、後述のように、エディタースクリプトの代わりに csc.rsp アセットファイルを使用してシンボルを指定して行います。
カスタムスクリプトシンボルは、プロジェクトのテキストアセットで設定することができます。これを行うには、csc.rsp
というカスタムスクリプトシンボルを定義するテキストファイルを、プロジェクトの Assets フォルダーのルートに加える必要があります。この特別なファイルは、起動時に Unity によって読み込まれ、コードがコンパイルされる前に適用されます。
例として、csc.rsp ファイルに -define:UNITY_DEBUG という 1 行を加えると、UNITY_DEBUG というシンボルが、エディタースクリプトを除く C# スクリプト用のグローバルに定義されたスクリプトシンボルとして含まれるようになります。
.rsp ファイルに変更を行うたびに、それを有効にするためには再コンパイルを行う必要があります。スクリプトファイルを更新または再インポートして、これを行います。
ノート: グローバルなスクリプトシンボルだけを変更したい場合は、(前述のように) Player Settings ウィンドウからエディターの Scripting Define Symbols に追加してください。これはすべてのコンパイラをカバーするためです。.rsp ファイルを代わりに選択する場合、Unity が使用するそれぞれのコンパイラーに対して 1 つのファイルを提供する必要があります。