diff options
Diffstat (limited to 'Assets/ActionTool/Editor/ActionManager.cs')
-rw-r--r-- | Assets/ActionTool/Editor/ActionManager.cs | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/Assets/ActionTool/Editor/ActionManager.cs b/Assets/ActionTool/Editor/ActionManager.cs new file mode 100644 index 00000000..e894d32c --- /dev/null +++ b/Assets/ActionTool/Editor/ActionManager.cs @@ -0,0 +1,154 @@ +using System.Collections;
+using System.Collections.Generic;
+using UnityEditor;
+using UnityEngine;
+
+namespace ActionTool
+{
+ public static class ActionManager
+ {
+ public static string s_AnimFolder = "Assets/Art/Animations/";
+ public static string s_Controller = "Assets/ActionTool/controller_temp.controller";
+ public static string s_AnimationDataFolder = "Assets/Data/AnimationData/";
+ public static string s_UnitDataFolder = "Assets/Data/UnitData/";
+
+ public static ActionEditor AnimationWindow;
+ public static ActionPreviewEditor PreviewWindow;
+ public static ActionEventEditor EventEditWindow;
+ public static ActionColliderEditor ColliderWindow;
+
+ public const int FPS = 30;
+
+ public static float Speed = 1;
+
+ public static GameObject CurrentUnit
+ {
+ get
+ {
+ return s_CurrentUnit;
+ }
+ }
+
+ public static string CurrentAnimationName
+ {
+ get
+ {
+ return s_CurrentAnimationName;
+ }
+ }
+
+ private static GameObject s_CurrentUnit;
+ private static string s_CurrentAnimationName;
+ private static GameObject s_UnitInstance;
+ private static Animator s_Animator;
+ private static AnimatorOverrideController s_OverrideContorller;
+
+ private static ActionData s_CurActionData;
+
+ public static Vector3 s_InitPosition = Vector3.zero;
+
+ public static Quaternion s_InitRotation = Quaternion.identity;
+
+ private static bool s_IsPlay;
+ public static bool IsPlay { get { return s_IsPlay; } }
+
+ public static void OnSelectObj(GameObject obj)
+ {
+ Release();
+ s_CurrentUnit = obj;
+ if(s_CurrentUnit != null)
+ {
+ s_UnitInstance = GameObject.Instantiate(obj);
+ InitializeUnitInstance(s_UnitInstance);
+ }
+ }
+
+ public static void OnSelectAnimation(string animation)
+ {
+ s_CurrentAnimationName = animation;
+ if(PreviewWindow == null)
+ PreviewWindow = EditorWindow.GetWindow<ActionPreviewEditor>();
+ PreviewWindow.Repaint();
+
+ string animpath = s_AnimFolder + s_CurrentUnit.name + "/" + animation + ".anim";
+ AnimationClip clip = AssetDatabase.LoadAssetAtPath(animpath, typeof(AnimationClip)) as AnimationClip;
+ if(clip)
+ {
+ s_OverrideContorller["EmptyAction"] = clip;
+ }
+
+ if(s_CurActionData == null)
+ s_CurActionData = new ActionData();
+ s_CurActionData.Initialize(s_Animator, clip);
+ }
+
+ public static bool HasSelectObj()
+ {
+ return s_CurrentUnit != null;
+ }
+
+ public static string GetUnitName()
+ {
+ if (s_CurrentUnit == null)
+ return null;
+ return s_CurrentUnit.name;
+ }
+
+ public static void Release()
+ {
+ if(s_UnitInstance != null)
+ GameObject.DestroyImmediate(s_UnitInstance);
+ s_UnitInstance = null;
+ s_CurrentUnit = null;
+ s_CurrentAnimationName = null;
+ s_Animator = null;
+ }
+
+ private static void InitializeUnitInstance(GameObject unit)
+ {
+ if (unit == null)
+ return;
+
+ unit.transform.position = s_InitPosition;
+ unit.transform.rotation = s_InitRotation;
+
+ s_Animator = unit.GetComponentInChildren<Animator>();
+ if(s_Animator == null)
+ {
+ Debug.LogError("[ActionTool] 角色prefab下没有animator");
+ return;
+ }
+
+ RuntimeAnimatorController controller = AssetDatabase.LoadAssetAtPath(s_Controller, typeof(RuntimeAnimatorController)) as RuntimeAnimatorController;
+ if(controller == null)
+ {
+ Debug.LogError("[ActionTool] 文件丢失" + s_Controller);
+ return;
+ }
+
+ s_OverrideContorller = new AnimatorOverrideController(controller);
+ s_OverrideContorller.name = "override controller";
+ s_Animator.runtimeAnimatorController = s_OverrideContorller;
+
+ UnitRootMotion rootMotion = s_UnitInstance.GetComponent<UnitRootMotion>();
+ Object.DestroyImmediate(rootMotion);
+ }
+
+ public static void UpdateFrame()
+ {
+ if (s_CurActionData != null)
+ s_CurActionData.UpdateFrame();
+ }
+
+ public static void Pause()
+ {
+ s_IsPlay = !s_IsPlay;
+ if(s_IsPlay && s_CurActionData != null)
+ {
+ s_CurActionData.SetCurrentAnimTime(0);
+ s_CurActionData.StartFrame();
+ }
+ }
+
+ }
+}
\ No newline at end of file |