From 7669c3afcbd71f06233bce12bb521c582c07ee5b Mon Sep 17 00:00:00 2001 From: chai Date: Mon, 9 Aug 2021 08:47:48 +0800 Subject: *misc --- Assets/ActionTool/Editor/ActionEditor.cs | 81 +++++++++++++++------- Assets/ActionTool/Editor/ActionManager.cs | 9 +-- Assets/ActionTool/Editor/ActionPreviewEditor.cs | 40 ++++++++--- .../ActionTool/Editor/AnimationParameterEditor.cs | 54 +++++++++++++++ .../Editor/AnimationParameterEditor.cs.meta | 11 +++ Assets/ActionTool/Editor/AnimationToggleEditor.cs | 4 +- 6 files changed, 159 insertions(+), 40 deletions(-) create mode 100644 Assets/ActionTool/Editor/AnimationParameterEditor.cs create mode 100644 Assets/ActionTool/Editor/AnimationParameterEditor.cs.meta (limited to 'Assets/ActionTool/Editor') diff --git a/Assets/ActionTool/Editor/ActionEditor.cs b/Assets/ActionTool/Editor/ActionEditor.cs index 072d40cc..d94806ad 100644 --- a/Assets/ActionTool/Editor/ActionEditor.cs +++ b/Assets/ActionTool/Editor/ActionEditor.cs @@ -3,6 +3,7 @@ using System.Collections; using System.Collections.Generic; using UnityEditor; using UnityEngine; +using UnityEditor.SceneManagement; namespace ActionTool { @@ -18,15 +19,16 @@ namespace ActionTool string m_SearchText = ""; ActionEditorStyles styles; ActionEditorUI ui; + int currentPickerWindow; - public void OnEnable() + public void OnEnable() { titleContent = new GUIContent("Action Editor"); - } + } public void OnDisable() { - } + } public void OnGUI() { @@ -44,34 +46,61 @@ namespace ActionTool private void GUI_SelectUnit() { - if(ActionManager.CurrentUnit == null) - { - EditorGUILayout.HelpBox("选择角色prefab", MessageType.Warning); - } - GUILayout.BeginHorizontal(); + GUILayout.BeginHorizontal(); - GameObject selectObj = EditorGUILayout.ObjectField(ActionManager.CurrentUnit, typeof(GameObject), false, GUILayout.Width(position.width - 160)) as GameObject; + GameObject selectObj = EditorGUILayout.ObjectField(ActionManager.CurrentUnit, typeof(GameObject), false, GUILayout.Width(position.width - 160)) as GameObject; - if(selectObj != ActionManager.CurrentUnit) - { - ActionManager.OnSelectObj(selectObj); - } + if (selectObj != null && selectObj != ActionManager.CurrentUnit) + { + ActionManager.OnSelectObj(selectObj); + if (ActionManager.AnimationWindow != null) + { + ActionManager.AnimationWindow.Repaint(); + } + } - if (GUILayout.Button("Select", GUILayout.Width(70))) + if (GUILayout.Button("Select", GUILayout.Width(70))) { - - } - - if (GUILayout.Button("Reimport", GUILayout.Width(70))) - { - - } - - GUILayout.EndHorizontal(); - } - - private Vector2 m_AnimtionListScroll; + currentPickerWindow = EditorGUIUtility.GetControlID(FocusType.Passive) + 100; + EditorGUIUtility.ShowObjectPicker(ActionManager.CurrentUnit, false, "l:UnitPrefab", currentPickerWindow); + } + + string commandName = Event.current.commandName; + if(/*commandName.Equals("ObjectSelectorUpdated") || */commandName.Equals("ObjectSelectorClosed")) + { + GameObject go = EditorGUIUtility.GetObjectPickerObject() as GameObject; + if (/*go != null && */ActionManager.CurrentUnit != go) + { + ActionManager.OnSelectObj(go); + this.Repaint(); + } + } + + if (GUILayout.Button("Reimport", GUILayout.Width(70))) + { + ActionManager.OnSelectObj(ActionManager.CurrentUnit); + } + + GUILayout.EndHorizontal(); + + var scene = EditorSceneManager.GetActiveScene(); + if (scene == null || scene.path != ActionManager.scenePath) + { + if(GUILayout.Button("打开ActionToolScene")) + { + EditorSceneManager.OpenScene(ActionManager.scenePath); + } + } + + if (ActionManager.CurrentUnit == null) + { + EditorGUILayout.HelpBox("选择角色prefab", MessageType.Warning); + } + + } + + private Vector2 m_AnimtionListScroll; private void GUI_AnimationList() { if (!ActionManager.HasSelectObj()) diff --git a/Assets/ActionTool/Editor/ActionManager.cs b/Assets/ActionTool/Editor/ActionManager.cs index af3935a7..2d45630e 100644 --- a/Assets/ActionTool/Editor/ActionManager.cs +++ b/Assets/ActionTool/Editor/ActionManager.cs @@ -17,6 +17,7 @@ namespace ActionTool public static string s_Controller = "Assets/ActionTool/controller_temp.controller"; static string s_SettingPath = "Assets/ActionTool/ActionTool Settings.asset"; + public static string scenePath { get { return "Assets/ActionTool/ActionToolScene.unity"; } } //public static string s_AnimFolder = "Assets/Art/Animations/"; //public static string s_AnimationDataFolder = "Assets/Data/AnimationData/"; @@ -134,15 +135,15 @@ namespace ActionTool public static void OnSelectObj(GameObject obj) { Release(); - s_CurrentUnit = obj; + s_CurrentUnit = obj; if(s_CurrentUnit != null) { string path = AssetDatabase.GetAssetPath(obj); string folder = Path.GetDirectoryName(path).Replace('\\', '/'); folder = folder.Substring(0, folder.LastIndexOf('/')); - unitFolder = folder + "/"; - s_UnitInstance = GameObject.Instantiate(obj); - InitializeUnitInstance(s_UnitInstance); + unitFolder = folder + "/"; + s_UnitInstance = GameObject.Instantiate(obj); + InitializeUnitInstance(s_UnitInstance); } } diff --git a/Assets/ActionTool/Editor/ActionPreviewEditor.cs b/Assets/ActionTool/Editor/ActionPreviewEditor.cs index 32731deb..9c5fac92 100644 --- a/Assets/ActionTool/Editor/ActionPreviewEditor.cs +++ b/Assets/ActionTool/Editor/ActionPreviewEditor.cs @@ -102,11 +102,13 @@ namespace ActionTool float y = kToolbarHeight + 5; GUI_Detail(ref y); + GUI_Parameters(ref y); GUI_Toggle(ref y); GUI_Curves(ref y); GUI_Curve(ref y); + GUI_PlaybackTime(ref y); y += 5; - GUI_Setting(ref y); + GUI_Setting(ref y); GUI_TimeLineView(ref y); } @@ -278,16 +280,20 @@ namespace ActionTool GUI.Label(new Rect(xr, y, 100, 15), "None", styles.textMiddleBold); } y += 15; + } - GUI.Label(new Rect(xl, y, 105, 15), "Playback Frame:", styles.textMiddle); - GUI.Label(new Rect(xr, y, 510, 15), ActionManager.actionData.curAnimFrame.ToString("f2"), styles.textMiddleBold); - GUI.Label(new Rect(xl + 150, y, 105, 15), "Normalized Time:", styles.textMiddle); - GUI.Label(new Rect(xr + 150, y, 510, 15), ActionManager.actionData.curAnimTimeNormal.ToString("f2"), styles.textMiddleBold); - y += 15; + void GUI_PlaybackTime(ref float y) + { + float xl = 5, xr = xl + 105; + GUI.Label(new Rect(xl, y, 105, 15), "Playback Frame:", styles.textMiddle); + GUI.Label(new Rect(xr, y, 510, 15), ActionManager.actionData.curAnimFrame.ToString("f2"), styles.textMiddleBold); + GUI.Label(new Rect(xl + 150, y, 105, 15), "Normalized Time:", styles.textMiddle); + GUI.Label(new Rect(xr + 150, y, 510, 15), ActionManager.actionData.curAnimTimeNormal.ToString("f2"), styles.textMiddleBold); + y += 15; + } - } - void GUI_Curve(ref float y) + void GUI_Curve(ref float y) { AnimationData animData = ActionManager.animationData; if (animData == null) @@ -301,6 +307,24 @@ namespace ActionTool y += 15; } + void GUI_Parameters(ref float y) + { + AnimationData animData = ActionManager.animationData; + if (animData == null) + return; + var parameters = animData.parameters; + float x = 5; + GUI.Label(new Rect(x, y, 105, 15), "Parameters:", styles.textMiddle); + x += 105; + GUI.Label(new Rect(x, y, 10, 15), (parameters != null ? parameters.Count : 0).ToString(), styles.textMiddleBold); + x += 20; + if (GUI.Button(new Rect(x, y, 50, 15), "Edit")) + { + EditorWindow.GetWindow(true); + } + y += 15; + } + void GUI_Toggle(ref float y) { AnimationData animData = ActionManager.animationData; diff --git a/Assets/ActionTool/Editor/AnimationParameterEditor.cs b/Assets/ActionTool/Editor/AnimationParameterEditor.cs new file mode 100644 index 00000000..4a382170 --- /dev/null +++ b/Assets/ActionTool/Editor/AnimationParameterEditor.cs @@ -0,0 +1,54 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +namespace ActionTool +{ + + [CustomPropertyDrawer(typeof(ParameterDictionary))] + public class ParameterDictionaryDrawer : SerializableDictionaryPropertyDrawer { } + + public class AnimationParameterEditor : EditorWindow + { + + SerializedObject obj; + + private void OnEnable() + { + titleContent = new GUIContent("Parameters"); + maxSize = new Vector2(300, 200); + minSize = maxSize; + } + + private void OnDisable() + { + } + + private void Update() + { + } + + private void OnGUI() + { + AnimationData animData = ActionManager.animationData; + if (animData == null) + { + this.Close(); + return; + } + + if (obj == null || obj.targetObject != animData) + { + obj = new SerializedObject(animData); + } + + var curves = obj.FindProperty("parameters"); + EditorGUILayout.PropertyField(curves, true); + if (obj.ApplyModifiedProperties()) + { + } + } + } + +} diff --git a/Assets/ActionTool/Editor/AnimationParameterEditor.cs.meta b/Assets/ActionTool/Editor/AnimationParameterEditor.cs.meta new file mode 100644 index 00000000..f0555041 --- /dev/null +++ b/Assets/ActionTool/Editor/AnimationParameterEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4ffd18cdca7a4c2439cef0254dcf751a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ActionTool/Editor/AnimationToggleEditor.cs b/Assets/ActionTool/Editor/AnimationToggleEditor.cs index fc153567..0ac47dae 100644 --- a/Assets/ActionTool/Editor/AnimationToggleEditor.cs +++ b/Assets/ActionTool/Editor/AnimationToggleEditor.cs @@ -54,12 +54,12 @@ namespace ActionTool List keys = new List(animData.toggles.Keys); for(int i = 0; i < keys.Count; ++i) { - Vector2 minMax = animData.toggles[keys[i]]; + Vector2 minMax = animData.toggles[keys[i]].fromTo; minMax.x = Mathf.Clamp(minMax.x, 0, 1); minMax.y = Mathf.Clamp(minMax.y, 0, 1); minMax.x = Mathf.Clamp(minMax.x, 0, minMax.y); minMax.y = Mathf.Clamp(minMax.y, minMax.x, 1); - animData.toggles[keys[i]] = minMax; + animData.toggles[keys[i]] = new FromTo(minMax); } } } -- cgit v1.1-26-g67d0