C# 如何创建显示Unity中列表列表的自定义检查器?

C# 如何创建显示Unity中列表列表的自定义检查器?,c#,list,serialization,unity3d,unity5,C#,List,Serialization,Unity3d,Unity5,嗯,我正在处理游戏的一个特定部分,我需要创建一个列表,一个游戏级别列表,在每个列表节点中创建一个触发器列表(级别列表和其中的每个列表的大小是可变的)。 这都在脚本LevelController.cs中。 这是Trigger类(现在很简单) 和一个包装器类来创建级别列表 [System.Serializable] public class WrapperClass { public List<TriggerClass> Triggers = new List<Trigge

嗯,我正在处理游戏的一个特定部分,我需要创建一个列表,一个游戏级别列表,在每个列表节点中创建一个触发器列表(级别列表和其中的每个列表的大小是可变的)。 这都在脚本
LevelController.cs
中。 这是Trigger类(现在很简单)

和一个包装器类来创建级别列表

[System.Serializable]
public class WrapperClass
{
    public List<TriggerClass> Triggers = new List<TriggerClass>();
}
这里是
编辑列表.cs

public static class EditorList
{
    public static void Show (SerializedProperty list)
    {
        EditorGUILayout.PropertyField(list);
        EditorGUI.indentLevel += 1;
        if (list.isExpanded)
        {
            EditorGUILayout.PropertyField(list.FindPropertyRelative("Array.size"));
            for (int i = 0; i < list.arraySize; i++)
            {
                EditorGUILayout.PropertyField(list.GetArrayElementAtIndex(i));

            }
        }
        EditorGUI.indentLevel -= 1;
    }
}
公共静态类编辑器列表
{
公共静态无效显示(序列化属性列表)
{
EditorGUILayout.PropertyField(列表);
EditorGUI.indentLevel+=1;
if(list.isExpanded)
{
EditorGUILayout.PropertyField(list.FindPropertyRelative(“Array.size”);
for(int i=0;i
但这只是显示了带有空元素的“Levels”列表,我在每个元素中单击expande箭头,什么也没有显示,我知道会发生这种情况,因为脚本只在Levels列表中迭代,而不是其中的每个元素,但我不知道如何迭代Levels列表中的每个元素来显示相同的内容。 我不太习惯序列化,所以如果这听起来很容易,请原谅我


我不能做
EditorList.Show(list[I])在for循环中,因为它当然不能对序列化属性应用索引,所以如何处理?

不,您不需要
EditorList.cs

具有一个参数
includeChildren
,以显示其子属性

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(LevelController))]

public class InspectorCustomizer : Editor
{

    public override void OnInspectorGUI()   
    {
        //DrawDefaultInspector();

        serializedObject.Update();
        EditorGUILayout.PropertyField(serializedObject.FindProperty("Levels"), true);
        serializedObject.ApplyModifiedProperties();
    }
}
[CustomEditor(typeof(LevelController))]

public class InspectorCustomizer : Editor
{

    public override void OnInspectorGUI()   
    {
        //DrawDefaultInspector();

        serializedObject.Update();
        EditorList.Show(serializedObject.FindProperty("Levels"));
        serializedObject.ApplyModifiedProperties();
    }
}
public static class EditorList
{
    public static void Show (SerializedProperty list)
    {
        EditorGUILayout.PropertyField(list);
        EditorGUI.indentLevel += 1;
        if (list.isExpanded)
        {
            EditorGUILayout.PropertyField(list.FindPropertyRelative("Array.size"));
            for (int i = 0; i < list.arraySize; i++)
            {
                EditorGUILayout.PropertyField(list.GetArrayElementAtIndex(i));

            }
        }
        EditorGUI.indentLevel -= 1;
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(LevelController))]

public class InspectorCustomizer : Editor
{

    public override void OnInspectorGUI()   
    {
        //DrawDefaultInspector();

        serializedObject.Update();
        EditorGUILayout.PropertyField(serializedObject.FindProperty("Levels"), true);
        serializedObject.ApplyModifiedProperties();
    }
}