C# 在检查器中显示数组(Unity)
我有一个数组列表,我想在inspector中显示 这是我的代码:C# 在检查器中显示数组(Unity),c#,unity3d,inspector,C#,Unity3d,Inspector,我有一个数组列表,我想在inspector中显示 这是我的代码: SerializedProperty ClipArray; ClipArray = serializedObject.FindProperty("ClipArray"); // public AudioClip[] ClipArray; serializedObject.Update(); EditorGUILayout.PropertyField(ClipAr
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
已可序列化。