void ShowAddEventMenu() { // Now create the menu, add items and show it GenericMenu menu = new GenericMenu(); for (int i = 0; i < m_EventTypes.Length; ++i) { bool active = true; // Check if we already have a Entry for the current eventType, if so, disable it for (int p = 0; p < m_EventTriggerListProperty.arraySize; ++p) { UEventTrigger.EventEntry delegateEntry = m_CurrentEventTrigger.Triggers[p]; if ((int)delegateEntry.eventID == i) { active = false; } } if (active) { menu.AddItem(m_EventTypes[i], false, OnAddNewSelected, i); } else { menu.AddDisabledItem(m_EventTypes[i]); } } menu.ShowAsContext(); Event.current.Use(); }
public override void OnInspectorGUI() { SetGUIStyles(); serializedObject.Update(); int toBeRemovedEntry = -1; EditorGUILayout.Space(); Vector2 removeButtonSize = GUIStyle.none.CalcSize(m_IconToolbarMinus); Vector2 plusButtonSize = GUIStyle.none.CalcSize(m_IconToolbarPlus); for (int i = 0; i < m_EventTriggerListProperty.arraySize; ++i) { m_CurrentEventEntry = m_CurrentEventTrigger.Triggers[i]; EventTriggerType entryID = m_CurrentEventEntry.eventID; EditorGUILayout.BeginVertical(); float viewWidth = EditorGUIUtility.currentViewWidth - removeButtonSize.x - plusButtonSize.x - 32; m_EventTriggerToggleGroup[i] = GUILayout.Toggle(m_EventTriggerToggleGroup[i], eventNames[(int)entryID], "Foldout", GUILayout.Width(viewWidth)); #region 移除Event 和 增加Event.Handler Rect callbackRect = GUILayoutUtility.GetLastRect(); Rect removeButtonPos = new Rect(EditorGUIUtility.currentViewWidth - removeButtonSize.x - 8, callbackRect.y + 1, removeButtonSize.x, removeButtonSize.y); if (GUI.Button(removeButtonPos, m_IconToolbarMinus, GUIStyle.none)) { toBeRemovedEntry = i; } Rect plusButtonPos = new Rect(EditorGUIUtility.currentViewWidth - removeButtonPos.width - plusButtonSize.x - 8, callbackRect.y + 1, plusButtonSize.x, plusButtonSize.y); if (GUI.Button(plusButtonPos, m_IconToolbarPlus, GUIStyle.none)) { ShowAddHandlerMenu(); toBeAddEntry = i; } #endregion if (m_EventTriggerToggleGroup[i]) { SerializedProperty eventEntryProperty = m_EventTriggerListProperty.GetArrayElementAtIndex(i); if (eventEntryProperty != null) { SerializedProperty eventHandlerList = eventEntryProperty.FindPropertyRelative("m_EventHandlerList"); if (eventHandlerList != null) { int toBeRemoveHandler = -1; for (int j = 0; j < eventHandlerList.arraySize; ++j) { SerializedProperty handler = eventHandlerList.GetArrayElementAtIndex(j); if (handler != null) { m_EventIDName.text = eventHandlerNames[handler.FindPropertyRelative("m_handlerType").enumValueIndex]; EditorGUILayout.BeginVertical(m_VerticalGroupStyle); EditorGUILayout.LabelField(m_EventIDName, m_EventHandlerLabelStyle); Rect handlerRemoveRect = GUILayoutUtility.GetLastRect(); Rect handlerremoveButtonPos = new Rect(EditorGUIUtility.currentViewWidth - removeButtonSize.x - 8, handlerRemoveRect.y + 1, removeButtonSize.x, removeButtonSize.y); if (GUI.Button(handlerremoveButtonPos, m_IconToolbarMinus, GUIStyle.none)) { toBeRemoveHandler = j; } DrawHandlerInfoProperty(entryID, handler); EditorGUILayout.EndVertical(); EditorGUILayout.Space(); } } if (toBeRemoveHandler > -1) { eventHandlerList.DeleteArrayElementAtIndex(toBeRemoveHandler); } } } //if (m_CurrentEventEntry.EventHandlerList != null) //{ // int toBeRemoveHandler = -1; // for (int j = 0; j < m_CurrentEventEntry.EventHandlerList.Count; ++j) // { // EventHandlerBase handler = m_CurrentEventEntry.EventHandlerList[j]; // m_EventIDName.text = eventHandlerNames[(int)handler.HandlerType]; // EditorGUILayout.BeginVertical(m_VerticalGroupStyle); // EditorGUILayout.LabelField(m_EventIDName, m_EventHandlerLabelStyle); // Rect handlerRemoveRect = GUILayoutUtility.GetLastRect(); // Rect handlerremoveButtonPos = new Rect(EditorGUIUtility.currentViewWidth - removeButtonSize.x - 8, handlerRemoveRect.y + 1, removeButtonSize.x, removeButtonSize.y); // if (GUI.Button(handlerremoveButtonPos, m_IconToolbarMinus, GUIStyle.none)) // { // toBeRemoveHandler = j; // } // //EditorGUI.LabelField(handlerRect,m_EventIDName); // DrawHandlerInfo(handler); // EditorGUILayout.EndVertical(); // EditorGUILayout.Space(); // } // if (toBeRemoveHandler > -1) // { // m_CurrentEventEntry.EventHandlerList.RemoveAt(toBeRemoveHandler); // } //} EditorGUILayout.Space(); } EditorGUILayout.EndVertical(); } 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)) { ShowAddEventMenu(); } serializedObject.ApplyModifiedProperties(); }