はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】エディタ拡張のプラグインを作る際のプラットフォーム判定について

unityのバージョン unity2018.4.0f1

はじめに

今回はエディタ拡張のプラグインを作る際のプラットフォーム判定についての記事になります!

ただ最初に申し上げておくと、私自身本当にそうなのかは確信がないので、参考程度に考えていただけると嬉しいです。

プラットフォーム依存コンパイル

よくこのようなコードでプラットフォーム判定をすることがあると思います。

using UnityEngine;
using System.Collections;

public class PlatformDefines : MonoBehaviour {
  void Start () {

    #if UNITY_EDITOR
      Debug.Log("Unity Editor");
    #endif
    
    #if UNITY_IOS
      Debug.Log("Iphone");
    #endif

    #if UNITY_STANDALONE_OSX
    Debug.Log("Stand Alone OSX");
    #endif

    #if UNITY_STANDALONE_WIN
      Debug.Log("Stand Alone Windows");
    #endif

  }          
}

ただこれはコンパイル時にプラットフォームに応じてコードを分けることを行っています。

しかしプラグインを作成する場合、例えばVisual Studio内でコンパイルを行うと、おかしなことになってしまうのではないのかと思いました。
(本当かどうかはまだ分かっていません)

これを考えて以下のような書き方に変更しました。

Application.platformを使う

こちらのコードに変更すれば、この問題を解決できると思います。

if (Application.platform == RuntimePlatform.OSXEditor) {
  // MacOSでのエディタ
}
else if (Application.platform == RuntimePlatform.WindowsEditor) {
  // Windowsでのエディタ
}
else if (Application.platform == RuntimePlatform.LinuxEditor) {
  // Linuxでのエディタ
}
else  {
  //その他
}

さいごに

とりあえず下のコードなら安全だと思います。

ただくどいかもしれませんが、本当に上のやり方がダメなのかは分かっていませんのでご了承ください。