UnityのInspectorで変数を表示する方法まとめ

  • 71
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

UnityのInspectorでの変数の表示についてまとめてみた

表示する方法

  • 変数をpublicフィールドにする

public string hoge

  • [SerializeField]属性を変数の前に書く
[SerializeField]
private string huga;
  • [System.Serializable]属性をクラス定義の前に書く
[System.Serializable]
public class HogeClass {
    public string hoge;
}

public class NewBehabiourScript : MonoBehaviour {

    public HogeClass hogeData;
}
  • InspectorをDebugモードにする

http://docs-jp.unity3d.com/Documentation/Manual/InspectorOptions.html

表示しない方法
* [HideInInspector]属性を変数の前に書く

[HideInInspector]
public string hoge;

隠しているだけで、プレハブに値が保持されているので、後でスクリプトの変数の初期値を変えても、プレハブに値がのこっていて、動作が変わらないというトラブルに注意
[System.NonSerialized]のほうがトラブルが少ない

  • [System.NonSerialized]属性を変数の前に書く
[System.NonSerialized]
public string fuga;

パラメータをそもそもプレハブに保存しないので、当然Inspectorに表示されない
publicだけど、Inspectorで触ってほしくないときに使う

  • Editorスクリプトで1から作る

詳細は省略 レイアウトを自分で決めるので表示非表示も自由

どうしても表示できないもの

  • structのパラメーター

structは属性をつけても表示できないので、classにするしかない模様
(unityのVector3構造体とかがなぜ表示できるかは謎ですが)

勘違いorバージョンアップでstructも表示できるようです
classと同様に[System.NonSerialized]を付加すればOKです

  • ジェネリッククラス

ジェネリックスは[System.Serializable]属性を与えてもインスペクターに表示することも、Editorスクリプトでアクセスすることもできない。
対策として、ジェネリッククラスを継承した別のクラスを作れば表示できる

(ちなみにDictionaryは structのKeyValuePair + ジェネリックスの二重苦なので普通は表示できない
無理矢理な対策はこちら http://qiita.com/k_yanase/items/fb64ccfe1c14567a907d )