【解決】#if UNITY_ANDROIDがPCでも実行される

特定の設定時に、普通に「プラットフォーム依存コンパイル」を使用すると、スマートフォンの実機でのみ実行したいコードが、PC(エディタ)上でも実行されてしまう問題の解決法。

【結論】#ifの条件に「Androidの実機のみ」&「エディタ以外」を指定

この予期せぬ動作はバグではなく、Unityの仕様を把握していない為に起こる勘違いです(if条件の指定ミス)。


//Androidを指定しつつ、エディタを弾く。
    #if !UNITY_EDITOR && UNITY_ANDROID

    #endif

//エディタで別の動作をさせる場合には、以下のように書いても良い。
//(UNITY_EDITOR == trueのelse ifなので前述の物と同条件になっている)。
    #if UNITY_EDITOR

    #elif UNITY_ANDROID

    #endif

Unity公式フォーラムで、言及があった。

【理由】エディタ上での実行は、複数のプラットフォーム情報を持つ場合がある

Build SettingsでTarget PlatformをAndroidに切り替えている場合、エディタでの実行でも「UNITY_EDITOR」と「UNITY_ANDROID」2つのプラットフォーム情報を持つのを確認。

スクリプトに以下のコードを記述して確認出来る。


    #if UNITY_EDITOR && UNITY_ANDROID
        print("Editor and Android");
    #endif

iOSや、WEBGLに切り替えた場合も、同じ事態が発生すると思われる。
便利な機能だが、使用する際は注意されたし。

タイトルとURLをコピーしました