うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】SerializeField で 多次元リストを表示する

SerializeField では多次元配列を表示することができない

また FindProperty でも取得できないことから
多次元配列はシリアライズできないことが分かる

f:id:hacchi_man:20200224184111p:plain

using System.Collections.Generic;
using UnityEngine;

public class SampleMonoBehaviour : MonoBehaviour
{
    [SerializeField]
    private List<GameObject> listObjects;
    
    [SerializeField]
    private GameObject[] arrayObjects;
    
    [SerializeField]
    private List<List<GameObject>> list2Objects;
    
    [SerializeField]
    private GameObject[][] array2Objects;
}

これを解決するには IList用のラッパークラスを作成する

[System.Serializable]
public class ListWrapper<T>
{
    public List<T> List;
}

このラッパークラスを利用すると以下のように多次元配列でも表示することができるが Inspector の表示がカオスになるため基本的には利用しないか、CustomInspector を自作するのが望ましい

f:id:hacchi_man:20200224185307p:plain

using System.Collections.Generic;
using UnityEngine;

public class SampleMonoBehaviour : MonoBehaviour
{
    [SerializeField]
    private List<GameObjectList> list2Objects;
    
    [SerializeField]
    private List<GameObjectList2> list3Objects;
}

[System.Serializable]
public class GameObjectList2 : ListWrapper<GameObjectList>
{
}

[System.Serializable]
public class GameObjectList : ListWrapper<GameObject>
{
}