Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在检查器中显示数组(Unity)_C#_Unity3d_Inspector - Fatal编程技术网

C# 在检查器中显示数组(Unity)

C# 在检查器中显示数组(Unity),c#,unity3d,inspector,C#,Unity3d,Inspector,我有一个数组列表,我想在inspector中显示 这是我的代码: SerializedProperty ClipArray; ClipArray = serializedObject.FindProperty("ClipArray"); // public AudioClip[] ClipArray; serializedObject.Update(); EditorGUILayout.PropertyField(ClipAr

我有一个数组列表,我想在inspector中显示

这是我的代码:

        SerializedProperty ClipArray;
        ClipArray = serializedObject.FindProperty("ClipArray"); // public AudioClip[] ClipArray;



        serializedObject.Update();
        EditorGUILayout.PropertyField(ClipArray);
        serializedObject.ApplyModifiedProperties();
但是在inspector中,我显示了一个没有参数的数组


在声明数组时,是否尝试将system serializable置于脚本之上

[System.Serializable]
public AudioClip[] ClipArray;

数组中的任何值最初是否设置为null?

这是自定义编辑器中数组/列表的一个众所周知的问题

如果您签出,您将看到使用参数的重载

包括儿童
如果
true
则绘制包含子对象的属性否则只显示控件本身(例如仅显示一个折页,但下面没有任何内容)

所以实际上你所需要做的就是传递
true
like

SerializedProperty ClipArray;

// I would always do these only once ;)
private void OnEnable()
{
    ClipArray = serializedObject.FindProperty("ClipArray");
}

private void OnInspectorGUI ()
{
    serializedObject.Update();
    EditorGUILayout.PropertyField(ClipArray, true);
    serializedObject.ApplyModifiedProperties();
}

作为替代方案,您当然也可以自己使用所需字段构建整个绘图层次结构:

private void OnInspectorGUI ()
{
    serializedObject.Update();

    ClipArray.isExpanded = EditorGUILayout.Foldout(ClipArray.isExpanded, ClipArray.name);
    if(ClipArray.isExpanded)
    {
        EditorGUI.indentLevel++;

        // The field for item count
        ClipArray.arraySize = EditorGUILayout.IntField("size", ClipArray.arraySize);

        // draw item fields
        for(var i = 0; i< ClipArray.arraySize; i++)
        {
            var item = ClipArray.GetArrayElementAtIndex(i);
            EditorGUILayout.PropertyField(item, new GUIContent($"Element {i}");
        }

        EditorGUI.indentLevel--;
    }
    serializedObject.ApplyModifiedProperties();
}
InInspectorGUI上的私有void(
private void)
{
serializedObject.Update();
ClipArray.isExpanded=EditorGUILayout.Foldout(ClipArray.isExpanded,ClipArray.name);
if(ClipArray.isExpanded)
{
EditorGUI.indentLevel++;
//项目计数的字段
ClipArray.arraySize=EditorGUILayout.IntField(“大小”,ClipArray.arraySize);
//绘制项目字段
对于(变量i=0;i
我只是把它放在这里,因为手动构建这些东西曾经帮助我理解编辑器是如何工作的


注意:在智能手机上键入(&rightarrow;可能会有错误),但我希望这一想法变得清晰

该属性仅适用于类型,例如
结构
,并且不用于单个字段。您可能是Unity的,尽管公共字段无论如何都是序列化的(如果根据类型可序列化)。类型
AudioClip
已可序列化。