diff options
author | chai <chaifix@163.com> | 2022-06-23 08:56:29 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2022-06-23 08:56:29 +0800 |
commit | 64482ae0fb8cb756469b98620e8fbd166f5f5de0 (patch) | |
tree | b09724a2a48b27d28d341f2f612a55cd576212bc | |
parent | 10d011d06c8838c91435615b577f36cc893c2f9a (diff) |
* animation
-rw-r--r-- | Documents/模型.xlsx | bin | 2355895 -> 2356439 bytes | |||
-rw-r--r-- | Erika/Assets/Bundle/Unit/PC/Erika/ActionData/ErikaActionData.asset | 6 | ||||
-rw-r--r-- | Erika/Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs | 18 | ||||
-rw-r--r-- | Erika/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs | 44 | ||||
-rw-r--r-- | Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs | 29 | ||||
-rw-r--r-- | Erika/Assets/Scripts/Unit/Components/UnitState/PCState_States.cs | 2 | ||||
-rw-r--r-- | Erika/Assets/Scripts/Unit/UnitActionData.cs | 4 | ||||
-rw-r--r-- | Erika/Assets/Scripts/Unit/UnitRootMotion.cs | 2 |
8 files changed, 62 insertions, 43 deletions
diff --git a/Documents/模型.xlsx b/Documents/模型.xlsx Binary files differindex c6bcedda..9812d4cd 100644 --- a/Documents/模型.xlsx +++ b/Documents/模型.xlsx 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 /// <param name="normalizedTime"></param>
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 /// <param name="normalizedTransitionTime"></param>
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<TransitionData> transitions; + public List<TransitionData> 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<UnitAnimation.EAnimState, RootMotionData> m_RootMotionDic = new Dictionary<UnitAnimation.EAnimState, RootMotionData>();
+ Dictionary<UnitAnimation.EActionState, RootMotionData> m_RootMotionDic = new Dictionary<UnitAnimation.EActionState, RootMotionData>();
public void Reset()
{
|