この記事でのバージョン
Unity 5.3.0f4 Personal
はじめに
Unityでは[SerializeField]を使う事で、
privateな変数であってもInspectorに表示できます。
[SerializeField] private int _value; [SerializeField] private List<int> _valueList;
しかし以下のようにListのなかにListを入れた、いわゆる多次元のListは表示できません。
//Inspectorに表示されない [SerializeField] private List<List<int>> _valueListList;
今回はこのような多次元のListをInspectorに表示する方法の記事になります。
多次元Listをインスペクターに表示
早速方法ですが、Listを持ったクラスを作成し、そのクラスをListとして持たせるだけです。
具体的には以下ような感じです。
//Inspectorに複数データを表示するためのクラス [System.SerializableAttribute] public class ValueList{ public List<int> List = new List<int>(); public ValueList(List<int> list){ List = list; } } //Inspectorに表示される [SerializeField] private List<ValueList> _valueListList = new List<ValueList> ();
なお、ValueListは[SerializableAttribute]を付けてシリアル化可能にしています。
3次元以上の配列
お察しの通り、上記のコードでは2次元の配列しか表示できません。
一応、以下のようにひたすら配列を持ったクラスのListを使っていけば、
何次元でも可能ではありますが……。
[System.SerializableAttribute] public class ValueList{ public List<int> List = new List<int>(); public ValueList(List<int> list){ List = list; } } [System.SerializableAttribute] public class ValueList2{ public List<ValueList> List = new List<ValueList>(); public ValueList2(List<ValueList> list){ List = list; } } [System.SerializableAttribute] public class ValueList3{ public List<ValueList2> List = new List<ValueList2>(); public ValueList3(List<ValueList2> list){ List = list; } } [System.SerializableAttribute] public class ValueList4{ public List<ValueList3> List = new List<ValueList3>(); public ValueList4(List<ValueList3> list){ List = list; } } [System.SerializableAttribute] public class ValueList5{ public List<ValueList4> List = new List<ValueList4>(); public ValueList5(List<ValueList4> list){ List = list; } } //Inspectorに表示される [SerializeField] private List<ValueList5> _valueListList = new List<ValueList5> ();
可能なだけで、絶対使いませんね……。
おわりに
2次元までなら使えそうですが、それ以上となると今回の方法ではきつそうです。
そもそも3次元以上の配列使う機会なんてそうそうない気はしますが(:3っ)∋〜