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

Posted

技术标签:

【中文标题】如何在 Unity3d 检查器中显示锯齿状数组?【英文标题】:How to show a jagged array in Unity3d inspector? 【发布时间】:2019-02-01 16:17:01 【问题描述】:

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

该游戏是一款棋盘游戏,玩家可以选择不同的路径(例如马里奥派对)。为了做到这一点,我没有制作典型的直线路点系统(从 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】:

快速回答:你不能这么简单。 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 中的代码 sn-p 作为起点实现您自己的检查器

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);

【讨论】:

第一种方式就像一个魅力,但我将阅读其他选项。感谢您的帮助!

以上是关于如何在 Unity3d 检查器中显示锯齿状数组?的主要内容,如果未能解决你的问题,请参考以下文章

Inspector 中的 Unity3d 排序的 2D 数组

如何在 C# 中对二维(矩形)数组进行排序?

在 C 中创建锯齿状 3D 数组

Unity3D材质 Material ( 材质简介 | 创建材质 | 设置材质属性 | 对 3D 物体应用材质 | 资源拖动到 Inspector 检查器中的 Material 属性中 )

如何根据所述数组的长度重命名数组中的元素? (在 Unity 检查器中)

你能帮我解决 Unity3d 项目中数组或枚举中的错误吗?