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