using System; using System.Collections; using System.Collections.Generic; using System.Reflection; using UnityEngine; using UnityEditor; namespace ActionTool { // 编辑事件 public class ActionEventEditor : EditorWindow { EditorWindow sceneView; ActionEditorStyles styles; AnimationEventBase animEvent; private void OnEnable() { titleContent = new GUIContent("Event Editor"); } private void OnDisable() { ActionManager.OnSelectAnimationEvent(null); } private void Update() { } Vector2 scroll; private void OnGUI() { animEvent = ActionManager.animationEvent; if (animEvent == null) { this.Close(); return; } if (styles == null) styles = ActionEditorStyles.Get(); string eventName = animEvent.name; int frame = animEvent.startFrame; Type type = animEvent.GetType(); GUILayout.Space(2); EditorGUILayout.LabelField(eventName, styles.textBoldBig, GUILayout.Height(25)); GUILayout.Space(2); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("Save")) { } if (GUILayout.Button("Revert")) { } Color prevColor = GUI.backgroundColor; GUI.backgroundColor = Color.red; if (GUILayout.Button("Delete")) { ActionManager.DeleteEvent(animEvent); ActionManager.OnSelectAnimationEvent(null); } GUI.backgroundColor = prevColor; EditorGUILayout.EndHorizontal(); GUILayout.Space(5); EditorGUILayout.LabelField("startFrame (int)", styles.textBold); GUI.enabled = false; EditorGUILayout.TextField(frame.ToString()); GUI.enabled = true; GUILayout.Space(5); scroll = EditorGUILayout.BeginScrollView(scroll); GUILayout.Space(5); FieldInfo[] fields = type.GetFields(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); if(fields != null && fields.Length > 0) { for(int i = 0; i < fields.Length; ++i) { FieldInfo field = fields[i]; string name = field.Name + " (" + field.FieldType.Name + ")"; string tooltip = ""; foreach(var attr in field.GetCustomAttributes()) { if(attr.GetType() == typeof(TooltipAttribute)) { TooltipAttribute tooltipattr = attr as TooltipAttribute; if(tooltip != null) { tooltip = tooltipattr.tooltip; } } } EditorGUILayout.LabelField(new GUIContent(name, tooltip), styles.textBold); if (field.FieldType == typeof(Vector3)) { field.SetValue(animEvent, GUI_Vector3((Vector3)field.GetValue(animEvent))); } else if (field.FieldType == typeof(Vector2)) { field.SetValue(animEvent, GUI_Vector2((Vector2)field.GetValue(animEvent))); } else if (field.FieldType == typeof(string)) { field.SetValue(animEvent, GUI_String((string)field.GetValue(animEvent))); } else if (field.FieldType == typeof(bool)) { field.SetValue(animEvent, GUI_Bool((bool)field.GetValue(animEvent))); } GUILayout.Space(5); } } EditorGUILayout.EndScrollView(); } Vector3 GUI_Vector3(Vector3 value) { Rect rect = EditorGUILayout.GetControlRect(); return EditorGUI.Vector3Field(rect, "", value); } Vector2 GUI_Vector2(Vector2 value) { Rect rect = EditorGUILayout.GetControlRect(); return EditorGUI.Vector2Field(rect, "", value); } string GUI_String(string value) { Rect rect = EditorGUILayout.GetControlRect(); return EditorGUI.TextField(rect, "", value); } bool GUI_Bool(bool value) { Rect rect = EditorGUILayout.GetControlRect(); return GUI.Toggle(rect, value, "Check"); } } }