如何在Unity3d检查器中显示锯齿状的数组?

时间:2019-02-01 16:17:02

标签: arrays unity3d jagged-arrays

我想制作一个锯齿状的数组以订购一组航点系统。我的问题是,我不知道如何在Unity检查器中显示锯齿状的数组,以便用所需的游戏对象(基本上是棋盘游戏的正方形)填充不同的数组。

该游戏是一种棋盘游戏,具有玩家可以选择的不同路径(例如Mario Party)。为了做到这一点,我没有制作一个典型的线性航路点系统(从A到B),而是考虑制作多个航路点系统,以便玩家到达交叉口时可以从一个航路点系统“跳”到另一个航路点系统。如我所写,我不知道如何在检查器中显示锯齿状的数组,以便我可以正常工作。我试图将[system.serializable]放在脚本类上,但是它不起作用,数组根本不出现。

public Transform[][] waypointSystems = new Transform[][] 
    {
      new Transform[1],
      new Transform[43],
      new Transform[1],
      new Transform[5],
      new Transform[7]
    };

1 个答案:

答案 0 :(得分:4)

快速解答:您不可能那么简单。 Muktidimesnional和锯齿状数组未序列化。

一种方法可能是将数组的一个维度包装在另一个类中

[Serializable]
public class TransformArray
{
    public Transform[] Array;

    public TransformArray(Transform[] array)
    {
        Array = array;
    }
}

public TransformArray[] waypointSystems = new TransformArray[]
{
    new TransformArray(new Transform[1]),
    new TransformArray(new Transform[43]),
    new TransformArray(new Transform[1]),
    new TransformArray(new Transform[5]),
    new TransformArray(new Transform[7])
};

或者,您可以编写一个[CustomEditor],但实际上它变得非常复杂。您可能对this post

感兴趣

或尝试使用this thread的代码段作为起点来实现自己的检查器

SerializedProperty data = property.FindPropertyRelative("rows");
for (int x = 0; x < data.arraySize; x++) 
{
   // do stuff for each member in the array
   EditorGUI.PropertyField(newPosition, data.GetArrayElementAtIndex(x), GUIContent.none);
}