using System.IO; using System.Collections; using System.Collections.Generic; using UnityEditor; using UnityEngine; using UnityEditor.SceneManagement; namespace ActionTool { public class ActionEditor : EditorWindow { [MenuItem("Erika/ActionTool/Open")] static void OpenTools() { ActionManager.AnimationWindow = GetWindow(); } string m_SearchText = ""; ActionEditorStyles styles; ActionEditorUI ui; int currentPickerWindow; public void OnEnable() { titleContent = new GUIContent("Action Editor"); } public void OnDisable() { } public void OnGUI() { if (styles == null) styles = ActionEditorStyles.Get(); if (ui == null) ui = ActionEditorUI.Get(); if (ActionManager.CurrentUnit == null) ActionManager.Release(); GUILayout.Space(5); GUI_SelectUnit(); GUILayout.Space(5); GUI_AnimationList(); GUILayout.Space(5); } private void GUI_SelectUnit() { GUILayout.BeginHorizontal(); GameObject selectObj = EditorGUILayout.ObjectField(ActionManager.CurrentUnit, typeof(GameObject), false, GUILayout.Width(position.width - 160)) as GameObject; if (selectObj != null && selectObj != ActionManager.CurrentUnit) { ActionManager.OnSelectObj(selectObj); if (ActionManager.AnimationWindow != null) { ActionManager.AnimationWindow.Repaint(); } } if (GUILayout.Button("Select", GUILayout.Width(70))) { 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()) return; EditorGUILayout.LabelField("Animation List"); m_SearchText = GUILayout.TextField(m_SearchText, "SearchTextField", GUILayout.Width(position.width - 20)).ToLower(); string animFolder = ActionManager.unitAnimationClipFolder; string[] animfiles = Directory.GetFiles(animFolder); if (animfiles != null && animfiles.Length > 0) { GUIStyle style = GUI.skin.GetStyle("Button"); TextAnchor prevAnchor = style.alignment; TextClipping prevClipping = style.clipping; bool prevRichText = style.richText; style.alignment = TextAnchor.MiddleCenter; style.clipping = TextClipping.Overflow; style.richText = true; m_AnimtionListScroll = EditorGUILayout.BeginScrollView(m_AnimtionListScroll); for (int i = 0; i < animfiles.Length; ++i) { string file = animfiles[i]; if (file.Contains(".meta")) continue; string animName = Path.GetFileNameWithoutExtension(file); bool show = m_SearchText == string.Empty || m_SearchText == "" || animName.ToLower().Contains(m_SearchText); if (!show) continue; bool bChecked = ActionManager.CurrentAnimationName == animName; EditorGUILayout.BeginHorizontal(); bool check = GUILayout.Toggle(bChecked, animName, style, GUILayout.Width(position.width - 42), GUILayout.Height(15)); if (check && ActionManager.CurrentAnimationName != animName) ActionManager.OnSelectAnimation(animName); if(GUILayout.Button("", styles.selectObj, GUILayout.Width(15), GUILayout.Height(15))) { ui.SelectObject(file); } EditorGUILayout.EndHorizontal(); } EditorGUILayout.EndScrollView(); style.alignment = prevAnchor; style.clipping = prevClipping; style.richText = prevRichText; } } } }