Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save mages-gamedev/201d33989cce8ba3f2d1cfef7b1017db to your computer and use it in GitHub Desktop.
Save mages-gamedev/201d33989cce8ba3f2d1cfef7b1017db to your computer and use it in GitHub Desktop.
A simple helper class that generates a Reorderable List in Unity that can be folded out.
using UnityEngine;
using UnityEditor;
using UnityEditorInternal;
public static class ReorderableListUtility {
public static ReorderableList GetListWithFoldout(SerializedObject serializedObject, SerializedProperty property, bool draggable, bool displayHeader, bool displayAddButton, bool displayRemoveButton) {
var list = new ReorderableList(serializedObject, property, draggable, displayHeader, displayAddButton, displayRemoveButton);
list.drawHeaderCallback = (Rect rect) => {
var newRect = new Rect(rect.x + 10, rect.y, rect.width-10, rect.height);
property.isExpanded = EditorGUI.Foldout(newRect, property.isExpanded, property.displayName);
};
list.drawElementCallback =
(Rect rect, int index, bool isActive, bool isFocused) => {
if (!property.isExpanded) {
GUI.enabled = index == list.count;
return;
}
var element = list.serializedProperty.GetArrayElementAtIndex(index);
rect.y += 2;
EditorGUI.ObjectField( new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight), element, GUIContent.none);
};
list.elementHeightCallback = (int indexer) => {
if (!property.isExpanded)
return 0;
else
return list.elementHeight;
};
return list;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment