summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2022-06-23 08:56:29 +0800
committerchai <chaifix@163.com>2022-06-23 08:56:29 +0800
commit64482ae0fb8cb756469b98620e8fbd166f5f5de0 (patch)
treeb09724a2a48b27d28d341f2f612a55cd576212bc
parent10d011d06c8838c91435615b577f36cc893c2f9a (diff)
* animation
-rw-r--r--Documents/模型.xlsxbin2355895 -> 2356439 bytes
-rw-r--r--Erika/Assets/Bundle/Unit/PC/Erika/ActionData/ErikaActionData.asset6
-rw-r--r--Erika/Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs18
-rw-r--r--Erika/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs44
-rw-r--r--Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs29
-rw-r--r--Erika/Assets/Scripts/Unit/Components/UnitState/PCState_States.cs2
-rw-r--r--Erika/Assets/Scripts/Unit/UnitActionData.cs4
-rw-r--r--Erika/Assets/Scripts/Unit/UnitRootMotion.cs2
8 files changed, 62 insertions, 43 deletions
diff --git a/Documents/模型.xlsx b/Documents/模型.xlsx
index c6bcedda..9812d4cd 100644
--- a/Documents/模型.xlsx
+++ b/Documents/模型.xlsx
Binary files 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
/// <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()
{