using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; namespace uc { [CustomEditor(typeof(HotKeyManager))] public class HotKeyManagerEditor : Editor { SerializedProperty hotkeysProperty; //private Editor _editor; //HotKeyManager hotkeyMamager; GUIContent m_IconToolbarMinus; GUIContent m_AddButonContent; //int index = 0; protected void OnEnable() { if (target == null) return; //hotkeyMamager = target as HotKeyManager; hotkeysProperty = serializedObject.FindProperty("hotkeys"); m_AddButonContent = new GUIContent("Add New Key"); m_IconToolbarMinus = new GUIContent(EditorGUIUtility.IconContent("Toolbar Minus")); //m_IconToolbarMinus = new GUIContent("remove"); m_IconToolbarMinus.tooltip = "Remove this key."; } public override void OnInspectorGUI() { if (target == null) return; serializedObject.Update(); int toBeRemovedEntry = -1; EditorGUILayout.Space(); Vector2 removeButtonSize = GUIStyle.none.CalcSize(m_IconToolbarMinus); for (int i = 0; i < hotkeysProperty.arraySize; ++i) { SerializedProperty delegateProperty = hotkeysProperty.GetArrayElementAtIndex(i); SerializedProperty enableProperty = delegateProperty.FindPropertyRelative("enable"); SerializedProperty m_CallStateProperty = delegateProperty.FindPropertyRelative("m_CallState"); SerializedProperty _keyCodeProperty = delegateProperty.FindPropertyRelative("_keyCode"); SerializedProperty _keyDownEvent = delegateProperty.FindPropertyRelative("_keyDownEvent"); EditorGUILayout.BeginHorizontal(); enableProperty.boolValue = EditorGUILayout.ToggleLeft(enableProperty.displayName, enableProperty.boolValue); Rect callbackRect = GUILayoutUtility.GetRect(removeButtonSize.y, removeButtonSize.y, GUI.skin.button); if (GUI.Button(callbackRect, m_IconToolbarMinus, GUI.skin.button)) { toBeRemovedEntry = i; } EditorGUILayout.EndHorizontal(); EditorGUI.BeginDisabledGroup(enableProperty.boolValue == false); { EditorGUILayout.BeginHorizontal(); EditorGUILayout.PropertyField(m_CallStateProperty, new GUIContent("")); EditorGUILayout.PropertyField(_keyCodeProperty, new GUIContent("")); EditorGUILayout.EndHorizontal(); EditorGUILayout.PropertyField(_keyDownEvent); } EditorGUI.EndDisabledGroup(); EditorGUILayout.Space(); } if (toBeRemovedEntry > -1) { RemoveEntry(toBeRemovedEntry); } Rect btPosition = GUILayoutUtility.GetRect(m_AddButonContent, GUI.skin.button); const float addButonWidth = 200f; btPosition.x = btPosition.x + (btPosition.width - addButonWidth) / 2; btPosition.width = addButonWidth; if (GUI.Button(btPosition, m_AddButonContent)) { hotkeysProperty.arraySize += 1; } serializedObject.ApplyModifiedProperties(); } private void RemoveEntry(int toBeRemovedEntry) { hotkeysProperty.DeleteArrayElementAtIndex(toBeRemovedEntry); } } }