Advertisement
zORg_alex

Generic editor for Reorderable lists

Dec 12th, 2024
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.91 KB | Source Code | 0 0
  1.  
  2. #if UNITY_EDITOR
  3.  
  4.         internal virtual Rect GUIDrawElement(Rect rect, SerializedProperty serializedProperty, bool isActive, bool isFocused)
  5.         {
  6.             if (serializedProperty == null)
  7.             {
  8.                 EditorGUI.HelpBox(rect, "SerializedProperty was null!", MessageType.Error);
  9.                 return rect;
  10.             }
  11.             serializedProperty = serializedProperty.Copy();
  12.             int startingDepth = serializedProperty.depth;
  13.             var currentRect = new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight);
  14.             EditorGUI.LabelField(currentRect, serializedProperty.boxedValue.GetType().Name);
  15.             var first = true;
  16.             while (serializedProperty.NextVisible(EnterChildren(serializedProperty, first)) && serializedProperty.depth > startingDepth)
  17.             {
  18.                 first = false;
  19.                 currentRect = currentRect.MoveDownFor(EditorGUI.GetPropertyHeight(serializedProperty));
  20.                 if (serializedProperty.propertyType == SerializedPropertyType.Generic && !serializedProperty.isArray)
  21.                     currentRect = currentRect.CutFromTop(EditorGUIUtility.singleLineHeight)[0];
  22.                 EditorGUI.indentLevel = serializedProperty.depth;
  23.                 EditorGUI.PropertyField(currentRect, serializedProperty);
  24.             }
  25.             return currentRect;
  26.  
  27.             static bool EnterChildren(SerializedProperty serializedProperty, bool first)
  28.             {
  29.                 return first || (
  30.                     serializedProperty.propertyType == SerializedPropertyType.Generic
  31.                     && !serializedProperty.isArray
  32.                     && serializedProperty.isExpanded
  33.                     );
  34.             }
  35.         }
  36.  
  37.         internal virtual float GUIElementHeight(SerializedProperty serializedProperty)
  38.         {
  39.             serializedProperty = serializedProperty.Copy();
  40.             int startingDepth = serializedProperty.depth;
  41.             float height = EditorGUIUtility.singleLineHeight * 2;
  42.             var first = true;
  43.             while (serializedProperty.NextVisible(first) && serializedProperty.depth > startingDepth)
  44.             {
  45.                 first = false;
  46.                 height += EditorGUI.GetPropertyHeight(serializedProperty);
  47.             }
  48.             return height;
  49.         }
  50. #endif
Tags: unity editor
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement