Version: Unity 6.0 (6000.0)
言語 : 日本語
条件付きコンパイル
Unity スクリプトシンボルのリファレンス

Unity での条件付きコンパイル

Unity は C# 言語での ディレクティブ の使用をサポートしているため、特定の スクリプトシンボル が定義されているどうかに応じて、コードを選択的にコンパイルに入れるか、コンパイルから除外することができます。C# でのこれらのディレクティブの動作の詳細は、C# プリプロセッサーディレクティブ に関する Microsoft のドキュメントを参照してください。

Unity には、コードのセクションを選択的にコンパイルに入れるか、コンパイルから除外することができるように、スクリプトで使用できるさまざまな定義済みシンボルがあります。例えば、Windows スタンドアロンプラットフォームのプロジェクトビルドで定義されるシンボルは UNITY_STANDALONE_WIN です。このシンボルが定義されているかどうかは、以下の特殊なタイプの if ステートメントで確認することができます。

#if UNITY_STANDALONE_WIN

  Debug.Log("Standalone Windows");

#endif

#if#endif の前にあるハッシュ (#) 文字は、これらの文がディレクティブであり、ランタイムではなくコンパイルプロセスで処理されることを示しています。上記の例の Debug 行は、プロジェクトの Windows スタンドアロンビルドのコンパイルにのみ含まれます。Unity エディターや他のターゲットビルドでコンパイルする場合は、この Debug 行は完全に省略されます。これは、ランタイムにコードの特定セクションの実行をバイパスするだけの可能性がある通常の if ステートメント の使用とは異なります。

#elif#else のディレクティブを使用して、複数の条件を確認できます。

#if UNITY_EDITOR

    Debug.Log("Unity Editor");

#elif UNITY_IOS

    Debug.Log("Unity iOS");

#else

    Debug.Log("Any other platform");

#endif

選択した プラットフォームエディターのバージョンその他 のシステム環境シナリオに基づいて、コードを選択的にコンパイルしたり省略したりすることができる定義済みシンボルがいくつかあります。Unity の定義済みシンボルの完全なリストについては、Unity スクリプトシンボルのリファレンス を参照してください。

エディター、スクリプト、またはアセットファイルを使用して、独自のスクリプトシンボルを定義することもできます。詳細は、カスタムスクリプトシンボル を参照してください。

注意スクリプトシンボル は、定義シンボル、プリプロセッサー定義、または単純に定義と呼ばれることもあります。

ディレクティブの代替手段

コードを条件付きで入れたり除外したりする最も適切で確実な方法は、必ずしもプリプロセッサーディレクティブであるとは限りません。以下はその代替手段です。

Conditional 属性

C# の Conditional 属性を使用すると、さらにクリーンに、エラーが発生しにくい方法で、関数をストリッピングできます。詳細は、ConditionalAttribute クラス を参照してください。Start()Update()LateUpdate()FixedUpdate()Awake() など、一般的な Unity のコールバックはこの属性の影響を受けません。一般的なコールバックは、エンジンから直接呼び出されているため、またパフォーマンス上の理由からも、属性によって考慮されることがないからです。

Assembly Definition 制限

高レベルの条件付きコンパイルにお勧めする方法は、関連する Assembly Definition ファイル を持つアセンブリにスクリプトを整理することです。条件付きで入れるまたは除外するコードがアセンブリ内にある場合は、Assembly Definition で Define Constraints を設定できます。例えば、特定のバージョンのパッケージがプロジェクトに存在する場合にのみコードをコンパイルするように設定できます。

条件付き実行

条件付きコンパイルの代わりに、標準 if ステートメントを使用して、コンパイル済みコードを条件付きで実行できます。例えば、Unity の UNITY_64 スクリプトシンボルは、64 ビットアーキテクチャでは信頼性の低いテストであるため、代わりに以下を実行します。

if (IntPtr.Size == 4)
{
    // 32 bit code
}
else
{
    // 64-bit code
}

追加リソース

条件付きコンパイル
Unity スクリプトシンボルのリファレンス
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961