From 567fc2da0b5367cbbe59ea5fb3596802c2aa7a43 Mon Sep 17 00:00:00 2001 From: chai Date: Thu, 29 Jul 2021 18:47:06 +0800 Subject: +collider editor --- Assets/ActionTool/Editor/ActionColliderEditor.cs | 169 ++++++++++++++------- .../ActionTool/Editor/ActionColliderEditor.cs.meta | 2 +- .../ActionTool/Editor/ActionColliderFrameEditor.cs | 82 ++++++++++ .../Editor/ActionColliderFrameEditor.cs.meta | 11 ++ Assets/ActionTool/Editor/ActionManager.cs | 14 +- Assets/ActionTool/Editor/ActionPreviewEditor.cs | 3 +- 6 files changed, 226 insertions(+), 55 deletions(-) create mode 100644 Assets/ActionTool/Editor/ActionColliderFrameEditor.cs create mode 100644 Assets/ActionTool/Editor/ActionColliderFrameEditor.cs.meta (limited to 'Assets/ActionTool') diff --git a/Assets/ActionTool/Editor/ActionColliderEditor.cs b/Assets/ActionTool/Editor/ActionColliderEditor.cs index d75fd8fc..346cadbc 100644 --- a/Assets/ActionTool/Editor/ActionColliderEditor.cs +++ b/Assets/ActionTool/Editor/ActionColliderEditor.cs @@ -1,82 +1,149 @@ -using System.Collections; +using System; +using System.Collections; using System.Collections.Generic; +using System.Reflection; using UnityEngine; using UnityEditor; namespace ActionTool { - // 编辑collider帧 + // 编辑事件 public class ActionColliderEditor : EditorWindow { - EditorWindow sceneView; + EditorWindow sceneView; + ActionEditorStyles styles; + + ColliderBox collider; private void OnEnable() { - titleContent = new GUIContent("Collider Editor"); - maxSize = new Vector2(300, 150); - minSize = maxSize; - - if(!sceneView) - sceneView = EditorWindow.GetWindow(); - } - - private void OnDisable() + titleContent = new GUIContent("Collider Editor"); + } + + private void OnDisable() { - // sceneView = null; - ActionManager.OnSelectColliderFrame(null); } - private void Update() - { - } + private void Update() + { + } - private void OnGUI() + Vector2 scroll; + private void OnGUI() { - var frame = ActionManager.editColliderFrame; - if (frame == null) + if (ActionManager.colliderData == null) { this.Close(); return; } - GUI.changed = false; + collider = ActionManager.colliderData.collider; + if (collider == null) + return; - GUILayout.Space(5); + if (styles == null) styles = ActionEditorStyles.Get(); - EditorGUILayout.BeginHorizontal(); - EditorGUILayout.LabelField("frame: "); - EditorGUILayout.LabelField(frame.frame.ToString()); - EditorGUILayout.EndHorizontal(); + GUILayout.Space(2); - EditorGUILayout.BeginHorizontal(); - EditorGUILayout.LabelField("active: "); - frame.active = EditorGUILayout.Toggle(frame.active); - EditorGUILayout.EndHorizontal(); + scroll = EditorGUILayout.BeginScrollView(scroll); - EditorGUILayout.LabelField("position: "); - frame.position = EditorGUILayout.Vector3Field("", frame.position); + Type type = collider.GetType(); + 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 = ""; + bool skip = false; + foreach (var attr in field.GetCustomAttributes()) + { + if (attr.GetType() == typeof(TooltipAttribute)) + { + TooltipAttribute tooltipattr = attr as TooltipAttribute; + if (tooltip != null) + { + tooltip = tooltipattr.tooltip; + } + } + else if(attr.GetType() == typeof(DisallowModifiyInGUI)) + { + GUI.enabled = false; + } + else if(attr.GetType() == typeof(ColliderTypeAttribute)) + { + ColliderTypeAttribute t = attr as ColliderTypeAttribute; + if (t.type != collider.type) + { + skip = true; + break; + } + } + } + if(skip) + { + GUI.enabled = true; + continue; + } + EditorGUILayout.LabelField(new GUIContent(name, tooltip), styles.textBold); + if (field.FieldType == typeof(Vector3)) + { + field.SetValue(collider, GUI_Vector3((Vector3)field.GetValue(collider))); + } + else if (field.FieldType == typeof(Vector2)) + { + field.SetValue(collider, GUI_Vector2((Vector2)field.GetValue(collider))); + } + else if (field.FieldType == typeof(string)) + { + field.SetValue(collider, GUI_String((string)field.GetValue(collider))); + } + else if (field.FieldType == typeof(bool)) + { + field.SetValue(collider, GUI_Bool((bool)field.GetValue(collider))); + } + else + { + GUI_Enum(field.GetValue(collider).ToString()); + } + GUI.enabled = true; + GUILayout.Space(5); + } + } + EditorGUILayout.EndScrollView(); + } - EditorGUILayout.LabelField("size: "); - frame.size = EditorGUILayout.Vector3Field("", frame.size); + Vector3 GUI_Vector3(Vector3 value) + { + Rect rect = EditorGUILayout.GetControlRect(); + return EditorGUI.Vector3Field(rect, "", value); + } - GUILayout.Space(10); + Vector2 GUI_Vector2(Vector2 value) + { + Rect rect = EditorGUILayout.GetControlRect(); + return EditorGUI.Vector2Field(rect, "", value); + } - Color prevColor = GUI.backgroundColor; - GUI.backgroundColor = Color.red; - if (GUILayout.Button("Delete")) - { - ActionManager.DeleteCurFrame(); - } - GUI.backgroundColor = prevColor; - - if (GUI.changed) - { - if (sceneView != null) - sceneView.Repaint(); - if (ActionManager.PreviewWindow != null) - ActionManager.PreviewWindow.Repaint(); - } + 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"); + } + + void GUI_Enum(string value) + { + Rect rect = EditorGUILayout.GetControlRect(); + GUI.Label(rect, value); + } + } -} \ No newline at end of file +} \ No newline at end of file diff --git a/Assets/ActionTool/Editor/ActionColliderEditor.cs.meta b/Assets/ActionTool/Editor/ActionColliderEditor.cs.meta index 393c3deb..2fd8e91f 100644 --- a/Assets/ActionTool/Editor/ActionColliderEditor.cs.meta +++ b/Assets/ActionTool/Editor/ActionColliderEditor.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3fcd174d4fc741a4986f1a08413e6ada +guid: 8507f595519bce344b9b7f27fa2f0f32 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/ActionTool/Editor/ActionColliderFrameEditor.cs b/Assets/ActionTool/Editor/ActionColliderFrameEditor.cs new file mode 100644 index 00000000..4f716be3 --- /dev/null +++ b/Assets/ActionTool/Editor/ActionColliderFrameEditor.cs @@ -0,0 +1,82 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +namespace ActionTool +{ + + // 编辑collider帧 + public class ActionColliderFrameEditor : EditorWindow + { + EditorWindow sceneView; + + private void OnEnable() + { + titleContent = new GUIContent("Collider Frame Editor"); + maxSize = new Vector2(300, 150); + minSize = maxSize; + + if(!sceneView) + sceneView = EditorWindow.GetWindow(); + } + + private void OnDisable() + { + // sceneView = null; + ActionManager.OnSelectColliderFrame(null); + } + + private void Update() + { + } + + private void OnGUI() + { + var frame = ActionManager.editColliderFrame; + if (frame == null) + { + this.Close(); + return; + } + + GUI.changed = false; + + GUILayout.Space(5); + + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.LabelField("frame: "); + EditorGUILayout.LabelField(frame.frame.ToString()); + EditorGUILayout.EndHorizontal(); + + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.LabelField("active: "); + frame.active = EditorGUILayout.Toggle(frame.active); + EditorGUILayout.EndHorizontal(); + + EditorGUILayout.LabelField("position: "); + frame.position = EditorGUILayout.Vector3Field("", frame.position); + + EditorGUILayout.LabelField("size: "); + frame.size = EditorGUILayout.Vector3Field("", frame.size); + + GUILayout.Space(10); + + Color prevColor = GUI.backgroundColor; + GUI.backgroundColor = Color.red; + if (GUILayout.Button("Delete")) + { + ActionManager.DeleteCurFrame(); + } + GUI.backgroundColor = prevColor; + + if (GUI.changed) + { + if (sceneView != null) + sceneView.Repaint(); + if (ActionManager.PreviewWindow != null) + ActionManager.PreviewWindow.Repaint(); + } + } + } +} \ No newline at end of file diff --git a/Assets/ActionTool/Editor/ActionColliderFrameEditor.cs.meta b/Assets/ActionTool/Editor/ActionColliderFrameEditor.cs.meta new file mode 100644 index 00000000..393c3deb --- /dev/null +++ b/Assets/ActionTool/Editor/ActionColliderFrameEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3fcd174d4fc741a4986f1a08413e6ada +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ActionTool/Editor/ActionManager.cs b/Assets/ActionTool/Editor/ActionManager.cs index 4fe3138b..7becca02 100644 --- a/Assets/ActionTool/Editor/ActionManager.cs +++ b/Assets/ActionTool/Editor/ActionManager.cs @@ -25,6 +25,7 @@ namespace ActionTool public static ActionEditor AnimationWindow; public static ActionPreviewEditor PreviewWindow; public static ActionEventEditor EventEditWindow; + public static ActionColliderFrameEditor ColliderFrameWindow; public static ActionColliderEditor ColliderWindow; public static ActionToolSettings Settings; @@ -170,7 +171,7 @@ namespace ActionTool OnSelectColliderFrame(null); OnSelectBox(null); if (EventEditWindow) EventEditWindow.Close(); - if (ColliderWindow) ColliderWindow.Close(); + if (ColliderFrameWindow) ColliderFrameWindow.Close(); } public static bool HasSelectObj() @@ -352,9 +353,18 @@ namespace ActionTool } } + public static void EditCollider() + { + if (s_CurColliderData == null) + return; + ColliderWindow = EditorWindow.GetWindow(true); + } + public static void OnSelectBox(ColliderData collider) { s_CurColliderData = collider; + if (ColliderWindow != null) + ColliderWindow.Repaint(); } public static void AddNewBoxFrame(object param) @@ -396,7 +406,7 @@ namespace ActionTool if (frame != null) { - ColliderWindow = EditorWindow.GetWindow(true); + ColliderFrameWindow = EditorWindow.GetWindow(true); ActionData action = ActionManager.actionData; float normaltime = frame.frame / action.totalFrame; diff --git a/Assets/ActionTool/Editor/ActionPreviewEditor.cs b/Assets/ActionTool/Editor/ActionPreviewEditor.cs index f0a828fc..ecec6dde 100644 --- a/Assets/ActionTool/Editor/ActionPreviewEditor.cs +++ b/Assets/ActionTool/Editor/ActionPreviewEditor.cs @@ -475,11 +475,12 @@ namespace ActionTool void GUI_Toolbar_Detail(ref float x, ref float y) { - x += kToolbarControlMargin; + x += kToolbarControlMargin + 20; Rect rect = new Rect(x, y, kToolbarControlSize, kToolbarControlSize); GUI.enabled = ActionManager.colliderData != null; if (GUI.Button(rect, new GUIContent(styles.infoIcon, "Detail"))) { + ActionManager.EditCollider(); } GUI.enabled = true; x += kToolbarControlSize; -- cgit v1.1-26-g67d0