Edited at

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

More than 3 years have passed since last update.

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 )