using System.Collections; using System.Collections.Generic; using UnityEditor; using UnityEngine; namespace VketCloudGUITools.Editor { public abstract class SubInspector : UnityEditor.Editor { public bool HideScriptField = false; const float SEPALATOR_HEIGHT = 3f; public override void OnInspectorGUI() { var width = EditorGUIUtility.currentViewWidth; var height = GetSubInspectorHeight(); Rect rect = GUILayoutUtility.GetRect(width, height); using (new GUI.ClipScope(rect)) { rect.x = 0f; rect.y = 0f; OnSubInspectorGUI(rect); } //GUILayoutUtility.GetRect( width, height ); } public virtual void OnSubInspectorGUI(Rect position) { var defaultIndentLevel = EditorGUI.indentLevel; serializedObject.Update(); var itr = serializedObject.GetIterator(); itr.Next(true); itr.NextVisible(true); do { var height = EditorGUI.GetPropertyHeight(itr); if (HideScriptField && itr.propertyPath == "m_Script") continue; var propertyPosition = position; propertyPosition.height = height; position.yMin += height + SEPALATOR_HEIGHT; EditorGUI.indentLevel = itr.depth + defaultIndentLevel + 1; EditorGUI.PropertyField(propertyPosition, itr, itr.isExpanded); } while (itr.NextVisible(false)); serializedObject.ApplyModifiedProperties(); EditorGUI.indentLevel = defaultIndentLevel; } public virtual float GetSubInspectorHeight() { float height = 0f; var itr = serializedObject.GetIterator(); itr.Next(true); itr.NextVisible(true); do { if (HideScriptField && itr.propertyPath == "m_Script") continue; height += EditorGUI.GetPropertyHeight(itr, itr.isExpanded); height += SEPALATOR_HEIGHT; } while (itr.NextVisible(false)); return height; } } }