Unityのプラットフォーム依存コンパイルを複数指定する方法

メモです。

Unityにはプラットフォームによってコードの実行/非実行を指定する機能があります。

docs.unity3d.com

以下はUnity公式ページからの抜粋です。
(実際はWii,PS4など、他にもあります)

プロパティ 説明
UNITY_EDITOR ゲームコードから Unity エディターのスクリプトを呼び出すための Define。
UNITY_EDITOR_WIN Windows 版エディターコードのための Define。
UNITY_EDITOR_OSX Mac OSX 版エディターコードのための Define。
UNITY_STANDALONE_WIN Windows スタンドアロンアプリケーションのコードをコンパイル/実行したいときに使用します。
UNITY_STANDALONE あらゆるスタンドアロンアプリケーション( MacWindows、または Linux )のコードをコンパイル/実行したいときに使用します。
UNITY_IOS iOS プラットフォームでコードのコンパイル/実行のための Define
UNITY_ANDROID Android プラットフォームの Define。
UNITY_WSA_10_0 Universal Windows 10 Apps をターゲットとしているときの Windows Store Apps のための Define(さらに .NET Core で C# ファイルをコンパイルするときには WINDOWS_UWP と NETFX_CORE の Define も追加されます)。


これを複数のプラットフォームでも有効にするには、

#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN
   /*ここに任意のコードを記述する*/
#endif

のように表示します。


私は普段macでコードを書いて、OculusDK2の動作確認はWindowsで試しています。

そのため、コードの中に

#if UNITY_EDITOR_OSX
   GameObject FPSController = GameObject.Find("FPSController");
#elif UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN
   GameObject OVRPlayerController = GameObject.Find("OVRPlayerController");
#endif


のような記述を書きます。


ただ、Windowsでもビルドして動作確認はあまり実施しないので、 さっきUNITY_STANDALONE_WINを付け忘れてビルドに失敗したので、備忘録として残しておくことにしました。