Показать массив в Инспекторе (Unity)
У меня есть список массивов, которые я хочу показать в инспекторе
Это мой код:
SerializedProperty ClipArray;
ClipArray = serializedObject.FindProperty("ClipArray"); // public AudioClip[] ClipArray;
serializedObject.Update();
EditorGUILayout.PropertyField(ClipArray);
serializedObject.ApplyModifiedProperties();
Но в инспекторе я показываю массив без параметров
1 ответ
Вы пытались поместить системный сериализуемый выше сценария, когда вы объявляете свой массив?
[System.Serializable]
public AudioClip[] ClipArray;
Какие-либо из значений в вашем массиве изначально установлены в нуль?
Это довольно известная проблема с массивами / списками в пользовательских редакторах.
Если вы оформляете заказ EditorGUILayout.PropertyField
вы увидите, что есть перегрузки, принимающие параметр
includeChildren
Еслиtrue
нарисовано имущество, в том числе дети; в противном случае только сам элемент управления (например, только разворот, но ничего под ним).
так что на самом деле все, что вам нужно сделать, это передать true
подобно
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();
}
Я просто оставляю его здесь, поскольку создание подобных вещей вручную однажды очень помогло мне понять, как работает редактор.
Примечание: набрано на смартфоне (→ могут быть ошибки), но я надеюсь, что идея прояснится