From 3db514468fac20693a257179d35592d0b78e2936 Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 7 Jul 2021 22:13:48 +0800 Subject: +RootMotion --- Assets/ActionTool/Editor/ActionData.cs | 19 +++++++++++-------- Assets/ActionTool/Editor/ActionEditor.cs | 2 +- Assets/ActionTool/Editor/ActionManager.cs | 23 ++++++++++++++++------- 3 files changed, 28 insertions(+), 16 deletions(-) (limited to 'Assets/ActionTool') diff --git a/Assets/ActionTool/Editor/ActionData.cs b/Assets/ActionTool/Editor/ActionData.cs index 33bb5c71..4465d314 100644 --- a/Assets/ActionTool/Editor/ActionData.cs +++ b/Assets/ActionTool/Editor/ActionData.cs @@ -30,7 +30,9 @@ namespace ActionTool private const string kStateName = "Action"; - public void Initialize(Animator animator, AnimationClip clip) + private RootMotionData m_RootMotion; + + public void Initialize(Animator animator, AnimationClip clip, RootMotionData rootmotion) { m_Animator = animator; m_Clip = clip; @@ -43,6 +45,7 @@ namespace ActionTool m_CurAnimFrame = 0; m_PrevLocalTime = 0; m_Animator.Play(kStateName, 0, 0); + m_RootMotion = rootmotion; } public void SetCurrentAnimTime(float time) @@ -136,17 +139,17 @@ namespace ActionTool if (m_Animator == null) return; - m_Animator.speed = 1; - float normalizeTime = m_CurAnimFrame / m_TotalFrame; + m_Animator.speed = 1; m_Animator.Play(kStateName, 0, normalizeTime); - m_Animator.Update((float)dt); - - m_Animator.transform.position += m_Animator.deltaPosition; - m_Animator.transform.rotation *= m_Animator.deltaRotation; - + m_Animator.Update(0); m_Animator.speed = 0; + + if(m_RootMotion) + { + m_Animator.transform.position = m_RootMotion.GetRootMotion(normalizeTime); + } } public int GetCurrentFrame() diff --git a/Assets/ActionTool/Editor/ActionEditor.cs b/Assets/ActionTool/Editor/ActionEditor.cs index 90c8bfc9..71942d34 100644 --- a/Assets/ActionTool/Editor/ActionEditor.cs +++ b/Assets/ActionTool/Editor/ActionEditor.cs @@ -15,7 +15,7 @@ namespace ActionTool ActionManager.AnimationWindow = GetWindow(); } - private string m_SearchText; + private string m_SearchText = ""; public void OnEnable() { diff --git a/Assets/ActionTool/Editor/ActionManager.cs b/Assets/ActionTool/Editor/ActionManager.cs index e894d32c..32c71434 100644 --- a/Assets/ActionTool/Editor/ActionManager.cs +++ b/Assets/ActionTool/Editor/ActionManager.cs @@ -10,7 +10,7 @@ namespace ActionTool 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/"; + static string s_RootMotionDataFolder = "Assets/Data/RootMotionData/"; public static ActionEditor AnimationWindow; public static ActionPreviewEditor PreviewWindow; @@ -49,6 +49,8 @@ namespace ActionTool public static Quaternion s_InitRotation = Quaternion.identity; + private static RootMotionData s_RootMotion; + private static bool s_IsPlay; public static bool IsPlay { get { return s_IsPlay; } } @@ -66,20 +68,28 @@ namespace ActionTool public static void OnSelectAnimation(string animation) { s_CurrentAnimationName = animation; - if(PreviewWindow == null) + if (PreviewWindow == null) PreviewWindow = EditorWindow.GetWindow(); PreviewWindow.Repaint(); string animpath = s_AnimFolder + s_CurrentUnit.name + "/" + animation + ".anim"; AnimationClip clip = AssetDatabase.LoadAssetAtPath(animpath, typeof(AnimationClip)) as AnimationClip; - if(clip) + if (clip) { s_OverrideContorller["EmptyAction"] = clip; } - if(s_CurActionData == null) + string rootmotionData = s_RootMotionDataFolder + s_CurrentUnit.name + "/" + animation.Replace(' ', '_') + ".asset"; + s_RootMotion = AssetDatabase.LoadAssetAtPath(rootmotionData); + if (s_RootMotion == null) + { + Debug.LogError("[ActionTool] 没有对应的rootmotion, " + rootmotionData); + } + + if (s_CurActionData == null) s_CurActionData = new ActionData(); - s_CurActionData.Initialize(s_Animator, clip); + s_CurActionData.Initialize(s_Animator, clip, s_RootMotion); + } public static bool HasSelectObj() @@ -130,8 +140,7 @@ namespace ActionTool s_OverrideContorller.name = "override controller"; s_Animator.runtimeAnimatorController = s_OverrideContorller; - UnitRootMotion rootMotion = s_UnitInstance.GetComponent(); - Object.DestroyImmediate(rootMotion); + s_Animator.applyRootMotion = false; } public static void UpdateFrame() -- cgit v1.1-26-g67d0