Это довольно известная проблема с массивами/списками в пользовательских редакторах.
Если вы выберете 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();
}
Я просто оставлю это здесь, так как когда-то создание подобных вещей вручную очень помогло мне понять, как работает редактор.
Примечание. Печатал со смартфона (могут быть ошибки), но надеюсь, что идея понятна
person
derHugo
schedule
08.01.2020