using UnityEditor; using UnityEngine; namespace Ubisoft { public abstract class HtUnityEditor : Editor { private bool m_foldout = true; public void OnEnable() { ExtendedOnEnable(); } protected virtual void ExtendedOnEnable() { } public override void OnInspectorGUI() { serializedObject.Update(); GUILayout.BeginVertical(); EditorGUILayout.Space(); GUIStyle foldoutStyle = EditorStyles.foldout; foldoutStyle.fontStyle = FontStyle.Bold; m_foldout = EditorGUI.Foldout(EditorGUILayout.GetControlRect(), m_foldout, target.name, true, foldoutStyle); if (m_foldout) { ExtendedOnInspectorGUI(); } EditorGUILayout.Space(); GUILayout.EndVertical(); if (serializedObject.ApplyModifiedProperties() || GUI.changed) { OnPropertyChanged(); } } protected virtual void ExtendedOnInspectorGUI() { SerializedProperty prop = serializedObject.GetIterator(); if (prop.NextVisible(true)) { do { // Omit m_Script property to make it more compact if (prop.name != "m_Script") { DrawProperty(prop); } } while (prop.NextVisible(false)); } } protected virtual void DrawProperty(SerializedProperty prop) { _ = EditorGUILayout.PropertyField(serializedObject.FindProperty(prop.name), true); } protected virtual void OnPropertyChanged() { } } }