From 10d011d06c8838c91435615b577f36cc893c2f9a Mon Sep 17 00:00:00 2001 From: chai Date: Thu, 23 Jun 2022 07:02:16 +0800 Subject: * animation --- .../Unit/PC/Erika/ActionData/ErikaActionData.asset | 10 ++++++ .../Components/UnitAnimation/MonsterAnimation.cs | 16 ++++----- .../Unit/Components/UnitAnimation/PCAnimation.cs | 8 ++--- .../Unit/Components/UnitAnimation/UnitAnimation.cs | 39 ++++++++++++---------- Erika/Assets/Scripts/Unit/TransitionData.cs | 24 ++++++++----- Erika/Assets/Scripts/Unit/UnitActionData.cs | 15 ++++++++- 6 files changed, 73 insertions(+), 39 deletions(-) diff --git a/Erika/Assets/Bundle/Unit/PC/Erika/ActionData/ErikaActionData.asset b/Erika/Assets/Bundle/Unit/PC/Erika/ActionData/ErikaActionData.asset index 2e3fdcaa..e46a4ebe 100644 --- a/Erika/Assets/Bundle/Unit/PC/Erika/ActionData/ErikaActionData.asset +++ b/Erika/Assets/Bundle/Unit/PC/Erika/ActionData/ErikaActionData.asset @@ -48,3 +48,13 @@ MonoBehaviour: - {fileID: 11400000, guid: 1c1857d54bd8c4b4092b7ac82f16a21f, type: 2} - {fileID: 11400000, guid: 1c1857d54bd8c4b4092b7ac82f16a21f, type: 2} - {fileID: 11400000, guid: ec8e24c834bbf4e4b8d2b4303c7cbe79, type: 2} + defaultTransitionNormalizedTime: 0.02 + transitions: + - transition: Idle->Move + enabled: 1 + type: 1 + duration: 0.01 + - transition: Move->Idle + enabled: 1 + type: 1 + duration: 1 diff --git a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs index f1c60174..9c9ba8e3 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs @@ -69,24 +69,24 @@ public class MonsterAnimation : UnitAnimation public void AnimHitLight() { - this.Play(EAnimState.HitLight, 0, 0); + this.Play(EAnimState.HitLight, 0); //m_Animator.CrossFade("HitLight", 0.05f, 0, 0, 0); } public void AnimHitAir() { - this.Play(EAnimState.HitAir, 0, 0); + this.Play(EAnimState.HitAir, 0); //m_Animator.CrossFade("HitLight", 0.05f, 0, 0, 0); } public void AnimHitInAir() { - this.Play(EAnimState.HitInAir, 0, 0); + this.Play(EAnimState.HitInAir, 0); } public void AnimHitBackHeavy() { - this.Play(EAnimState.HitBackHeavy, 0, 0); + this.Play(EAnimState.HitBackHeavy, 0); } public void AnimRise() @@ -94,14 +94,14 @@ public class MonsterAnimation : UnitAnimation this.CrossFade(EAnimState.Rise, 0); } - private void Play(EAnimState animState, int layerIndex = 0, float normalizedTime = float.NegativeInfinity) + private void Play(EAnimState animState, float normalizedTime = float.NegativeInfinity) { - base.Play(animState.ToString(), layerIndex, normalizedTime); + base.Play(animState.ToString(), normalizedTime); } - public void CrossFade(EAnimState animState, float normalizedTransitionDuration, int layerIndex = 0, float normalizedTimeOffset = float.NegativeInfinity, float normalizedTransitionTime = 0.0f) + public void CrossFade(EAnimState animState, float normalizedTransitionDuration, float normalizedTimeOffset = float.NegativeInfinity, float normalizedTransitionTime = 0.0f) { - base.CrossFade(animState.ToString(), normalizedTransitionDuration, layerIndex, normalizedTimeOffset, normalizedTransitionTime); + base.CrossFade(animState.ToString(), normalizedTransitionDuration, normalizedTimeOffset, normalizedTransitionTime); } } diff --git a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs index 33c1b42d..fa0f58fa 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs @@ -230,14 +230,14 @@ public class PCAnimation : UnitAnimation CrossFade(EAnimState.LandingGround, 0.00f); } - private void Play(EAnimState animState, float normalizedTime = float.NegativeInfinity, int layerIndex = 0) + private void Play(EAnimState animState, float normalizedTime = float.NegativeInfinity) { - base.Play(animState.ToString(), layerIndex, normalizedTime); + base.Play(animState.ToString(), normalizedTime); } - private void CrossFade(EAnimState animState, float normalizedTransitionDuration, float normalizedTimeOffset = float.NegativeInfinity, float normalizedTransitionTime = 0.0f, int layerIndex = 0) + private void CrossFade(EAnimState animState, float normalizedTransitionDuration, float normalizedTimeOffset = float.NegativeInfinity, float normalizedTransitionTime = 0.0f) { - base.CrossFade(animState.ToString(), normalizedTransitionDuration, layerIndex, normalizedTimeOffset, normalizedTransitionTime); + base.CrossFade(animState.ToString(), normalizedTransitionDuration, normalizedTimeOffset, normalizedTransitionTime); } } diff --git a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs index 529cd2f5..ac416acb 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs @@ -149,16 +149,11 @@ public class UnitAnimation : UnitComponent /// /// /// - public void Play(string animState, int layerIndex = 0, float normalizedTime = float.NegativeInfinity) + public void Play(string targetAction, float normalizedTime = float.NegativeInfinity) { - //AnimatorLayerInfo layer = this.layers[layerIndex]; - //if (layer == null) - // return; - //layer.OnPlay(animState, normalizedTime); + m_CurrentAction = targetAction; - m_CurrentAction = animState; - - m_Animator.Play(animState, layerIndex, normalizedTime); + m_Animator.Play(targetAction, 0, normalizedTime); m_TimelineEventProxy.ResetPrevAnimationData(); UnitRootMotion rm = m_Owner.GetComponent(); @@ -176,16 +171,26 @@ public class UnitAnimation : UnitComponent /// /// /// - public void CrossFade(string animState, float normalizedTransitionDuration, int layerIndex = 0, float normalizedTimeOffset = float.NegativeInfinity, float normalizedTransitionTime = 0.0f) - { - //AnimatorLayerInfo layer = this.layers[layerIndex]; - //if (layer == null) - // return; - //layer.OnCrossFade(animState, normalizedTransitionDuration, normalizedTimeOffset, normalizedTransitionTime); - - m_CurrentAction = animState; + public void CrossFade(string targetAction, float normalizedTransitionDuration, float normalizedTimeOffset = float.NegativeInfinity, float normalizedTransitionTime = 0.0f) + { + TransitionData transition = m_ActionData.GetTransitionData(m_CurrentAction, targetAction); + if(transition != null) + { + if(transition.type == TransitionData.TransitionType.NormalizedTime) + { + m_Animator.CrossFade(targetAction, transition.duration, 0, normalizedTimeOffset, normalizedTransitionTime); + } + else if(transition.type == TransitionData.TransitionType.FixedTime) + { + m_Animator.CrossFadeInFixedTime(targetAction, transition.duration, 0, normalizedTimeOffset, normalizedTransitionTime); + } + } + else + { + m_Animator.CrossFade(targetAction, normalizedTransitionDuration, 0, normalizedTimeOffset, normalizedTransitionTime); + } + m_CurrentAction = targetAction; - m_Animator.CrossFade(animState.ToString(), normalizedTransitionDuration, layerIndex, normalizedTimeOffset, normalizedTransitionTime); m_TimelineEventProxy.ResetPrevAnimationData(); UnitRootMotion rm = m_Owner.GetComponent(); diff --git a/Erika/Assets/Scripts/Unit/TransitionData.cs b/Erika/Assets/Scripts/Unit/TransitionData.cs index 27333b54..53606c35 100644 --- a/Erika/Assets/Scripts/Unit/TransitionData.cs +++ b/Erika/Assets/Scripts/Unit/TransitionData.cs @@ -1,26 +1,32 @@ -using System.Collections; +using System; +using System.Collections; using System.Collections.Generic; using UnityEngine; /// /// 动画过渡间隔配置 /// +[Serializable] public class TransitionData { - // 起始动画 - public string fromAnimation; - // 结束动画 - public string toAnimation; + // A->B + public string transition; + //// 起始动画 + //public string fromAnimation; + //// 结束动画 + //public string toAnimation; + + public bool enabled = true; public enum TransitionType { - FixedTime, // 固定时间(秒) - NormalizedTime, // 归一化时间 + FixedTime, // 固定时间(秒) + NormalizedTime, // 归一化时间 PoseDifference, // 对比前后pose的差异 } - public float duration; // FixedTime 或 NormalizedTime + public TransitionType type; - + public float duration; // FixedTime 或 NormalizedTime } diff --git a/Erika/Assets/Scripts/Unit/UnitActionData.cs b/Erika/Assets/Scripts/Unit/UnitActionData.cs index 43643491..92ad68f7 100644 --- a/Erika/Assets/Scripts/Unit/UnitActionData.cs +++ b/Erika/Assets/Scripts/Unit/UnitActionData.cs @@ -16,7 +16,14 @@ public class UnitActionData : ScriptableObject [Tooltip("所参照的AnimatorController")] public RuntimeAnimatorController referenceController; - public TriggerAnimationDictionary actions; + [Tooltip("所有动作和对应的动画片段")] + public TriggerAnimationDictionary actions; + + [Tooltip("默认过渡时间")] + public float defaultTransitionNormalizedTime = 0.02f; + + [Tooltip("设置动作间过渡时间")] + public List transitions; public AnimationData GetAnimationData(string actionName) { @@ -28,4 +35,10 @@ public class UnitActionData : ScriptableObject return null; } + public TransitionData GetTransitionData(string from, string to) + { + var transition = transitions.Find(t => t.transition == from + "->" + to && t.enabled); + return transition; + } + } -- cgit v1.1-26-g67d0