我正在尝试创建一个可重新排序的列表,但我正在使用EditorGUILayout来解决它。如果我使用EditorGUI它工作正常,但是字段的大小是静态的(除非我每次手动计算大小)。
这是我正在做的事情:
list = new ReorderableList(serializedObject, serializedObject.FindProperty("groupSettings"), true, true, true, true);
list.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => {
SerializedProperty element = list.serializedProperty.GetArrayElementAtIndex(index);
EditorGUILayout.BeginHorizontal();
{
EditorGUILayout.PropertyField(element.FindPropertyRelative("poolGroupName"), GUIContent.none);
EditorGUILayout.PropertyField(element.FindPropertyRelative("minPoolSize"), GUIContent.none);
EditorGUILayout.PropertyField(element.FindPropertyRelative("maxPoolSize"), GUIContent.none);
EditorGUILayout.PropertyField(element.FindPropertyRelative("prewarmCount"), GUIContent.none);
EditorGUILayout.PropertyField(element.FindPropertyRelative("prewarmObject"), GUIContent.none);
}
EditorGUILayout.EndHorizontal();
};
当我使用EditorGUILayout时,控件显示在可重新排序列表下方。我仍然可以交换订单,但内容总是显示在列表下方。
答案 0 :(得分:1)
正如您在callback参数中看到的那样。 Rect参数是显示GUI元素的区域。您不能使用GUILayout或EditorGUILayout。你应该自己计算位置。
list.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => {
SerializedProperty element = list.serializedProperty.GetArrayElementAtIndex(index);
float gap = 10f;
float numColumns = 5f;
float width = (rect.width - (numColumns - 1) * gap) / numColumns;
rect.height = 16f;
rect.width = width;
EditorGUI.PropertyField(rect, property.FindPropertyRelative("poolGroupName"));
rect.x += rect.width + gap;
EditorGUI.PropertyField(rect, property.FindPropertyRelative("minPoolSize"));
rect.x += rect.width + gap;
EditorGUI.PropertyField(rect, property.FindPropertyRelative("maxPoolSize"));
rect.x += rect.width + gap;
EditorGUI.PropertyField(rect, property.FindPropertyRelative("prewarmCount"));
rect.x += rect.width + gap;
EditorGUI.PropertyField(rect, property.FindPropertyRelative("prewarmObject"));
};