Unityな日々(Unity Geek)

Unityで可視化アプリを開発するための試行錯誤の覚書

入れ子のGeneric Listをインスペクタで使う

C#では、Generic Listを要素にもつGeneric List、すなわち、入れ子(多重)のGeneric Listを定義できる。

public List<List<string>> names = new List <List<string>>();

しかし、入れ子(二重)のGeneric Listは、インスペクタに表示されない。

インスペクタで入れ子Listを使うには、要素となるListをコンストラクタの引数とするクラスを定義し、そのクラスを親Listの要素にすることで実装できる。

次の事例は、'MyClass'クラスのGeneric Listを要素とするGeneric Listを作るもの。

子クラス(この事例では'ChildList')は、[System.Serializable]でシリアル化することを忘れないように。

//Generic ListをList要素とするためのクラス('PageController')
[System.Serializable]
public class ChildList
{
        public List<MyClass> list = new List<MyClass>();

        public ChildList(List<MyClass> _list)
        {
            list = _list;
        }
}

//メインクラス
public class MainClass : MonoBehaviour
{
    public List<ChildList> mainList = new List<ChildList>();
}

インスペクタでは、親List(MainList)の要素(Element0, Element1, ....)として、Listを指定できるようになる。

f:id:yasuda0404:20171219122102p:plain

子Listは、

List<MyClass> mylist = mainList[0].list

のように取り出す。