[Unity] 自前のクラスをインスペクタから編集できるようにする

By | 2014-08-16

Unityではスクリプトで定義したクラスのフィールドをPublicにするか[SerializeField]属性を頭に付けることでインスペクタから編集できるようになります。
しかし、自前で定義した構造体やクラスは上記のことをやってもインスペクタ上には表示されません。

たとえば以下のようなスクリプトをゲームオブジェクトにアタッチした場合、インスペクタ上では何も表示されません。

unity-class-ins1

独自で定義した構造体のフィールドはインスペクタから参照できないので諦めるしかないですが、クラスは参照させることができます。
クラスの前に[System.Serializable]属性をつけます。

unity-class-ins2

これでめでたしめでたし・・・かと思いきや、以下のようにテンプレート引数を持つジェネリッククラスでは[System.Serializable]属性をつけてもインスペクタに表示されません。

どうしてもインスペクタに表示させたい場合は、ジェネリッククラスからジェネリックではないサブクラスを作って使うしか無いようです。

ジェネリッククラスもインスペクタから参照できるようになってほしいですが、これは今後のバージョンアップに期待することとしましょう。

■参考サイト
Unity – Scripting API: Serializable
UnityのInspectorで変数を表示する方法まとめ – Qiita
C#で構造体をInspectorで使える様にする方法 – 強火で進め
[Unity]ジェネリッククラスをInspectorに表示するにはどうすればいいの? | ケットシーウェア

コメントを残す

メールアドレスが公開されることはありません。