From 64482ae0fb8cb756469b98620e8fbd166f5f5de0 Mon Sep 17 00:00:00 2001 From: chai Date: Thu, 23 Jun 2022 08:56:29 +0800 Subject: * animation --- "Documents/\346\250\241\345\236\213.xlsx" | Bin 2355895 -> 2356439 bytes .../Unit/PC/Erika/ActionData/ErikaActionData.asset | 6 +-- .../Components/UnitAnimation/MonsterAnimation.cs | 18 ++++----- .../Unit/Components/UnitAnimation/PCAnimation.cs | 44 ++++++++++----------- .../Unit/Components/UnitAnimation/UnitAnimation.cs | 29 +++++++++++--- .../Unit/Components/UnitState/PCState_States.cs | 2 +- Erika/Assets/Scripts/Unit/UnitActionData.cs | 4 +- Erika/Assets/Scripts/Unit/UnitRootMotion.cs | 2 +- 8 files changed, 62 insertions(+), 43 deletions(-) diff --git "a/Documents/\346\250\241\345\236\213.xlsx" "b/Documents/\346\250\241\345\236\213.xlsx" index c6bcedda..9812d4cd 100644 Binary files "a/Documents/\346\250\241\345\236\213.xlsx" and "b/Documents/\346\250\241\345\236\213.xlsx" differ diff --git a/Erika/Assets/Bundle/Unit/PC/Erika/ActionData/ErikaActionData.asset b/Erika/Assets/Bundle/Unit/PC/Erika/ActionData/ErikaActionData.asset index e46a4ebe..88fe1511 100644 --- a/Erika/Assets/Bundle/Unit/PC/Erika/ActionData/ErikaActionData.asset +++ b/Erika/Assets/Bundle/Unit/PC/Erika/ActionData/ErikaActionData.asset @@ -49,12 +49,12 @@ MonoBehaviour: - {fileID: 11400000, guid: 1c1857d54bd8c4b4092b7ac82f16a21f, type: 2} - {fileID: 11400000, guid: ec8e24c834bbf4e4b8d2b4303c7cbe79, type: 2} defaultTransitionNormalizedTime: 0.02 - transitions: + overrideTransitions: - transition: Idle->Move enabled: 1 type: 1 - duration: 0.01 + duration: 0.02 - transition: Move->Idle enabled: 1 type: 1 - duration: 1 + duration: 0.6 diff --git a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs index 9c9ba8e3..0600bf60 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs @@ -12,7 +12,7 @@ public class MonsterAnimation : UnitAnimation } // 动作名,和animator里的state对应 - public enum EAnimState + public enum EActionState { // layer 0 Idle = 0, @@ -64,42 +64,42 @@ public class MonsterAnimation : UnitAnimation public void AnimIdle() { - this.CrossFade(EAnimState.Idle, 0.2f, 0); + this.CrossFade(EActionState.Idle, 0.2f, 0); } public void AnimHitLight() { - this.Play(EAnimState.HitLight, 0); + this.Play(EActionState.HitLight, 0); //m_Animator.CrossFade("HitLight", 0.05f, 0, 0, 0); } public void AnimHitAir() { - this.Play(EAnimState.HitAir, 0); + this.Play(EActionState.HitAir, 0); //m_Animator.CrossFade("HitLight", 0.05f, 0, 0, 0); } public void AnimHitInAir() { - this.Play(EAnimState.HitInAir, 0); + this.Play(EActionState.HitInAir, 0); } public void AnimHitBackHeavy() { - this.Play(EAnimState.HitBackHeavy, 0); + this.Play(EActionState.HitBackHeavy, 0); } public void AnimRise() { - this.CrossFade(EAnimState.Rise, 0); + this.CrossFade(EActionState.Rise, 0); } - private void Play(EAnimState animState, float normalizedTime = float.NegativeInfinity) + private void Play(EActionState animState, float normalizedTime = float.NegativeInfinity) { base.Play(animState.ToString(), normalizedTime); } - public void CrossFade(EAnimState animState, float normalizedTransitionDuration, float normalizedTimeOffset = float.NegativeInfinity, float normalizedTransitionTime = 0.0f) + public void CrossFade(EActionState animState, float normalizedTransitionDuration, float normalizedTimeOffset = float.NegativeInfinity, float normalizedTransitionTime = 0.0f) { 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 fa0f58fa..fc0dafec 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs @@ -22,7 +22,7 @@ public class PCAnimation : UnitAnimation // 动作名,和animator里的state对应 - public enum EAnimState + public enum EActionState { // layer 0 Idle = 0, @@ -151,27 +151,27 @@ public class PCAnimation : UnitAnimation public void AnimIdle() { - CrossFade(EAnimState.Idle, 0.2f, 0); + CrossFade(EActionState.Idle, 0.2f, 0); } public void AnimMove() { - CrossFade(EAnimState.Move, 0.01f, 0); + CrossFade(EActionState.Move, 0.01f, 0); } public void AnimJump() { - CrossFade(EAnimState.Jump, 0.01f); + CrossFade(EActionState.Jump, 0.01f); } public void AnimAirAttack(int id) { m_Owner.unitCollider.OnAnimationChange(); - EAnimState state = EAnimState.AirAttack0; - if (id == 1) state = EAnimState.AirAttack1; - else if (id == 2) state = EAnimState.AirAttack2; - else if (id == 3) state = EAnimState.AirAttack3; - else if (id == 4) state = EAnimState.AirAttack4; + EActionState state = EActionState.AirAttack0; + if (id == 1) state = EActionState.AirAttack1; + else if (id == 2) state = EActionState.AirAttack2; + else if (id == 3) state = EActionState.AirAttack3; + else if (id == 4) state = EActionState.AirAttack4; AnimationData data = GetAnimationDataOfState(state.ToString()); Debug.Assert(data != null); @@ -183,7 +183,7 @@ public class PCAnimation : UnitAnimation public void AnimAttackToAir(float offset) { m_Owner.unitCollider.OnAnimationChange(); - Play(EAnimState.AttackToAir, offset); + Play(EActionState.AttackToAir, offset); } public void AnimAttack(int id) @@ -192,50 +192,50 @@ public class PCAnimation : UnitAnimation switch (id) { case 0: - CrossFade(EAnimState.Attack0, 0.02f); + CrossFade(EActionState.Attack0, 0.02f); break; case 1: - CrossFade(EAnimState.Attack1, 0.02f); + CrossFade(EActionState.Attack1, 0.02f); break; case 2: - CrossFade(EAnimState.Attack2, 0.02f); + CrossFade(EActionState.Attack2, 0.02f); break; case 3: - CrossFade(EAnimState.Attack3, 0.02f); + CrossFade(EActionState.Attack3, 0.02f); break; } } public void AnimAirDash() { - AnimationData data = GetAnimationDataOfState(EAnimState.AirDash.ToString()); - if (stateInfo.IsName(EAnimState.AirDash.ToString())) + AnimationData data = GetAnimationDataOfState(EActionState.AirDash.ToString()); + if (stateInfo.IsName(EActionState.AirDash.ToString())) { float offset = data.GetProperty(EAnimationProperty.ComboTimeOffset, 0); - this.Play(EAnimState.AirDash, offset); + this.Play(EActionState.AirDash, offset); } else { - CrossFade(EAnimState.AirDash, 0.02f); + CrossFade(EActionState.AirDash, 0.02f); } } public void AnimLanding() { - CrossFade(EAnimState.Landing, 0.05f); + CrossFade(EActionState.Landing, 0.05f); } public void AnimLandingGround() { - CrossFade(EAnimState.LandingGround, 0.00f); + CrossFade(EActionState.LandingGround, 0.00f); } - private void Play(EAnimState animState, float normalizedTime = float.NegativeInfinity) + private void Play(EActionState animState, float normalizedTime = float.NegativeInfinity) { base.Play(animState.ToString(), normalizedTime); } - private void CrossFade(EAnimState animState, float normalizedTransitionDuration, float normalizedTimeOffset = float.NegativeInfinity, float normalizedTransitionTime = 0.0f) + private void CrossFade(EActionState animState, float normalizedTransitionDuration, float normalizedTimeOffset = float.NegativeInfinity, float normalizedTransitionTime = 0.0f) { 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 ac416acb..45276edc 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs @@ -19,7 +19,20 @@ public class UnitAnimation : UnitComponent // 当前动作,和AnimatorState不同,忽略过渡,即时切换 protected string m_CurrentAction = "Idle"; - public string currentAction { get { return m_CurrentAction; } } + public string currentAction + { + get + { + return m_CurrentAction; + } + set + { + m_CurrentAction = value; + m_Dirty = true; + } + } + + private bool m_Dirty = true; public Animator animator { get { return m_Animator; } } protected Animator m_Animator; @@ -33,11 +46,17 @@ public class UnitAnimation : UnitComponent } // 当前动作的AnimationData + private AnimationData m_CachedAnimationData; public AnimationData animationData { get { - return m_ActionData.GetAnimationData(currentAction); + if (m_Dirty) + { + m_CachedAnimationData = m_ActionData.GetAnimationData(currentAction); + m_Dirty = false; + } + return m_CachedAnimationData; } } @@ -151,7 +170,7 @@ public class UnitAnimation : UnitComponent /// public void Play(string targetAction, float normalizedTime = float.NegativeInfinity) { - m_CurrentAction = targetAction; + currentAction = targetAction; m_Animator.Play(targetAction, 0, normalizedTime); m_TimelineEventProxy.ResetPrevAnimationData(); @@ -173,7 +192,7 @@ public class UnitAnimation : UnitComponent /// public void CrossFade(string targetAction, float normalizedTransitionDuration, float normalizedTimeOffset = float.NegativeInfinity, float normalizedTransitionTime = 0.0f) { - TransitionData transition = m_ActionData.GetTransitionData(m_CurrentAction, targetAction); + TransitionData transition = m_ActionData.GetTransitionData(currentAction, targetAction); if(transition != null) { if(transition.type == TransitionData.TransitionType.NormalizedTime) @@ -189,7 +208,7 @@ public class UnitAnimation : UnitComponent { m_Animator.CrossFade(targetAction, normalizedTransitionDuration, 0, normalizedTimeOffset, normalizedTransitionTime); } - m_CurrentAction = targetAction; + currentAction = targetAction; m_TimelineEventProxy.ResetPrevAnimationData(); diff --git a/Erika/Assets/Scripts/Unit/Components/UnitState/PCState_States.cs b/Erika/Assets/Scripts/Unit/Components/UnitState/PCState_States.cs index 051f1ee8..a65ad23e 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitState/PCState_States.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitState/PCState_States.cs @@ -93,7 +93,7 @@ public partial class PCState : UnitState if (m_Owner.isTowardRight && !param.isRight || !m_Owner.isTowardRight && param.isRight) { - //m_Owner.pcAnimation.Play(UnitAnimation.EAnimState.Turn); + //m_Owner.pcAnimation.Play(UnitAnimation.EActionState.Turn); //yield return new WaitForActionReachEnd(m_Owner.pcAnimation); //if (param.isRight) // m_Owner.transform.rotation = Quaternion.Euler(0, 0, 0); diff --git a/Erika/Assets/Scripts/Unit/UnitActionData.cs b/Erika/Assets/Scripts/Unit/UnitActionData.cs index 92ad68f7..82c68bd0 100644 --- a/Erika/Assets/Scripts/Unit/UnitActionData.cs +++ b/Erika/Assets/Scripts/Unit/UnitActionData.cs @@ -23,7 +23,7 @@ public class UnitActionData : ScriptableObject public float defaultTransitionNormalizedTime = 0.02f; [Tooltip("设置动作间过渡时间")] - public List transitions; + public List overrideTransitions; public AnimationData GetAnimationData(string actionName) { @@ -37,7 +37,7 @@ public class UnitActionData : ScriptableObject public TransitionData GetTransitionData(string from, string to) { - var transition = transitions.Find(t => t.transition == from + "->" + to && t.enabled); + var transition = overrideTransitions.Find(t => t.transition == from + "->" + to && t.enabled); return transition; } diff --git a/Erika/Assets/Scripts/Unit/UnitRootMotion.cs b/Erika/Assets/Scripts/Unit/UnitRootMotion.cs index 3acd7994..fa3b3ab6 100644 --- a/Erika/Assets/Scripts/Unit/UnitRootMotion.cs +++ b/Erika/Assets/Scripts/Unit/UnitRootMotion.cs @@ -28,7 +28,7 @@ public class UnitRootMotion : UnitComponent private float m_PrevNormalTime; - Dictionary m_RootMotionDic = new Dictionary(); + Dictionary m_RootMotionDic = new Dictionary(); public void Reset() { -- cgit v1.1-26-g67d0