diff options
author | chai <chaifix@163.com> | 2021-08-06 19:02:03 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2021-08-06 19:02:03 +0800 |
commit | 754ceacd8ab62e7094f1827ae45ea16a502725ad (patch) | |
tree | 7165384f470bf0c4ae261d7dd22876416c150964 /Assets/Scripts/Unit/Component | |
parent | 35f2e468715e12d93cb88f2258c2d0ae82d1d189 (diff) |
*curve
Diffstat (limited to 'Assets/Scripts/Unit/Component')
-rw-r--r-- | Assets/Scripts/Unit/Component/UnitAnimation.cs | 108 | ||||
-rw-r--r-- | Assets/Scripts/Unit/Component/UnitState.cs | 56 |
2 files changed, 121 insertions, 43 deletions
diff --git a/Assets/Scripts/Unit/Component/UnitAnimation.cs b/Assets/Scripts/Unit/Component/UnitAnimation.cs index e1bca484..44cfb08b 100644 --- a/Assets/Scripts/Unit/Component/UnitAnimation.cs +++ b/Assets/Scripts/Unit/Component/UnitAnimation.cs @@ -5,6 +5,7 @@ using UnityEngine; using UnityEditor;
#endif
+// 单独一层动画
public class AnimatorLayerInfo
{
public UnitAnimation.ELayer layer;
@@ -24,7 +25,7 @@ public class AnimatorLayerInfo if (clipInfo == null || clipInfo.Length == 0)
return null;
var clip = clipInfo[0]; //选第一个
- string folder = m_Owner.folder;
+ string folder = m_UnitAnimation.owner.folder;
string name = clip.clip.name;
if (m_AnimationData != null && m_AnimationData.animationName == name)
return m_AnimationData;
@@ -36,19 +37,19 @@ public class AnimatorLayerInfo }
}
- // 当前动作所有animation data,包括blendtree使用的所有动画
- //private List<AnimationData> m_AnimationDatas;
- //public List<AnimationData> animationDatas
- //{
- // get
- // {
- // return null;
- // }
- //}
-
- // 当前在播放的动作
- // 如果处于transition中,动作不变,切换完成后才会到下一个动作
- public AnimatorStateInfo stateInfo
+ // 当前动作所有animation data,包括blendtree使用的所有动画
+ //private List<AnimationData> m_AnimationDatas;
+ //public List<AnimationData> animationDatas
+ //{
+ // get
+ // {
+ // return null;
+ // }
+ //}
+
+ // 当前在播放的动作
+ // 如果处于transition中,动作不变,切换完成后才会到下一个动作
+ public AnimatorStateInfo stateInfo
{
get
{
@@ -111,7 +112,20 @@ public class AnimatorLayerInfo }
}
- public float weight
+ public float playbackSpeed
+ {
+ get
+ {
+ return m_Animator.GetFloat("PlaybackSpeed" + layerIndex);
+ }
+ set
+ {
+ float v = Mathf.Clamp(value, 0, 10);
+ m_Animator.SetFloat("PlaybackSpeed" + layerIndex, v);
+ }
+ }
+
+ public float weight
{
get
{
@@ -139,19 +153,22 @@ public class AnimatorLayerInfo }
}
- UnitController m_Owner;
+ UnitAnimation m_UnitAnimation;
- Coroutine m_CalcPlaybackTimeCoroutine;
+ Coroutine m_CalcPlaybackTimeCoroutine;
- public AnimatorLayerInfo(UnitController owner, Animator animator, UnitAnimation.ELayer layer)
+ TimelineEventProxy m_TimelineEventProxy;
+
+ public AnimatorLayerInfo(UnitAnimation unitAnimation, Animator animator, UnitAnimation.ELayer layer)
{
- this.m_Owner = owner;
+ this.m_UnitAnimation = unitAnimation;
this.m_Animator = animator;
this.layer = layer;
- m_CalcPlaybackTimeCoroutine = owner.StartCoroutine(CalcPlaybackRealTimeCoroutine());
- }
+ m_CalcPlaybackTimeCoroutine = unitAnimation.StartCoroutine(CalcPlaybackRealTimeCoroutine());
+ m_TimelineEventProxy = new TimelineEventProxy(unitAnimation.owner.transform, unitAnimation);
+ }
- IEnumerator CalcPlaybackRealTimeCoroutine()
+ IEnumerator CalcPlaybackRealTimeCoroutine()
{
while (true)
{
@@ -164,6 +181,17 @@ public class AnimatorLayerInfo yield return null;
}
}
+
+ public void OnUpdate()
+ {
+ // 执行事件
+ m_TimelineEventProxy.ExecuteAnimationEvents(animationData, playbackTimeInSeconds * TimelineEventProxy.FPS);
+ if(animationData.speedCurve != null)
+ {
+ playbackSpeed = animationData.speedCurve.Evaluate(playbackNomralizedTime);
+ }
+ }
+
}
// 控制动画播放、执行动作timeline(包括执行事件和碰撞盒)
@@ -210,14 +238,12 @@ public class UnitAnimation : UnitComponent public Animator animator { get { return m_Animator; } }
private Animator m_Animator;
- private UnitTimeline m_Timeline;
-
private UnitActionData m_ActionData;
public AnimatorLayerInfo[] layers { get { return m_LayerInfo; } }
private readonly AnimatorLayerInfo[] m_LayerInfo = new AnimatorLayerInfo[(int)ELayer.Count];
- public bool isInTransition
+ public bool isInTransition
{
get
{
@@ -229,13 +255,12 @@ public class UnitAnimation : UnitComponent {
base.Initialize();
- m_Timeline = this.m_Owner.unitObj.GetOrAddComponent<UnitTimeline>();
m_Animator = this.m_Owner.unitObj.GetComponent<Animator>();
m_Animator.speed = 0;
- m_LayerInfo[0] = new AnimatorLayerInfo(m_Owner, m_Animator, ELayer.Basic);
- m_LayerInfo[1] = new AnimatorLayerInfo(m_Owner, m_Animator, ELayer.Attack);
+ m_LayerInfo[0] = new AnimatorLayerInfo(this, m_Animator, ELayer.Basic);
+ m_LayerInfo[1] = new AnimatorLayerInfo(this, m_Animator, ELayer.Attack);
if (m_Animator == null)
{
@@ -247,11 +272,22 @@ public class UnitAnimation : UnitComponent {
base.OnUpdate();
+ UpdateLayer();
UpdateAnimation();
UpdateRootMotion();
}
- void UpdateAnimation()
+ void UpdateLayer()
+ {
+ m_LayerInfo[0].OnUpdate();
+ return;
+ for (int i = 0; i < m_LayerInfo.Length; ++i)
+ {
+ m_LayerInfo[i].OnUpdate();
+ }
+ }
+
+ void UpdateAnimation()
{
m_Animator.speed = 1;
m_Animator.Update(Time.deltaTime);
@@ -265,13 +301,19 @@ public class UnitAnimation : UnitComponent public void AnimIdle()
{
- m_Animator.SetTrigger(ETrigger.ToIdle.ToString());
- }
+ if(layers[0].stateInfo.shortNameHash != Animator.StringToHash("Idle"))
+ {
+ m_Animator.SetTrigger(ETrigger.ToIdle.ToString());
+ }
+ }
public void AnimMove()
{
- m_Animator.SetTrigger(ETrigger.ToMove.ToString());
- }
+ if (layers[0].stateInfo.shortNameHash != Animator.StringToHash("Move"))
+ {
+ m_Animator.SetTrigger(ETrigger.ToMove.ToString());
+ }
+ }
public void AnimAttack()
{
diff --git a/Assets/Scripts/Unit/Component/UnitState.cs b/Assets/Scripts/Unit/Component/UnitState.cs index 4a57ad6d..fd9bba00 100644 --- a/Assets/Scripts/Unit/Component/UnitState.cs +++ b/Assets/Scripts/Unit/Component/UnitState.cs @@ -10,7 +10,9 @@ public class UnitState : UnitComponent {
public enum EUnitState
{
- Idle ,
+ Nien,
+
+ Idle ,
Move ,
Spawn ,
Die ,
@@ -105,21 +107,47 @@ public class UnitState : UnitComponent return false;
}
- #region Idle
+ IEnumerator Nein() { yield break; }
+ void OnNienExit(EUnitState nextState) { }
+
+ #region Idle
IEnumerator Idle(IdleParam param)
{
- if(m_Owner.isInAir)
+ if(m_Owner.isInAir) // 浮空切换到landing
{
}
- m_Owner.unitAnimation.AnimIdle();
- yield return null;
+ else // idle
+ {
+ m_Owner.SetYPosition(0);
+ m_Owner.unitAnimation.AnimIdle();
+ while (true)
+ {
+ if (Input.GetKeyDown("j"))
+ {
+ ChangeState(EUnitState.Skill, new SkillParam());
+ }
+ if (Input.GetKeyDown("space"))
+ {
+ ChangeState(EUnitState.Jump, new JumpParam());
+ }
+ if (Input.GetKey("d"))
+ {
+ InputManager.Instance.OnMoveRight();
+ }
+ if (Input.GetKey("a"))
+ {
+ InputManager.Instance.OnMoveLeft();
+ }
+ yield return null;
+ }
+ }
}
void OnIdleExit(EUnitState nextState)
{
- LogHelper.Log(nextState.ToString());
+ m_Owner.unitAnimation.animator.ResetTrigger("ToIdle");
}
#endregion
@@ -139,7 +167,7 @@ public class UnitState : UnitComponent }
//if (Input.GetKey(param.key))
m_Owner.unitAnimation.AnimMove();
- while (Input.GetKey(param.key))
+ while (Input.GetKey(param.key))
{
yield return null;
}
@@ -148,7 +176,7 @@ public class UnitState : UnitComponent void OnMoveExit(EUnitState nextState)
{
- //m_Owner.unitAnimation.animator.ResetTrigger("ToMove");
+ m_Owner.unitAnimation.animator.ResetTrigger("ToMove");
}
#endregion
@@ -174,8 +202,16 @@ public class UnitState : UnitComponent IEnumerator Jump(JumpParam param)
{
- yield return new WaitForActionReachEnd(m_Owner.unitAnimation);
- ChangeState<IdleParam>(EUnitState.Idle);
+ while(true)
+ {
+ // 空中连击
+ if(Input.GetKeyDown("j"))
+ {
+ SkillParam skill = new SkillParam();
+ ChangeState(EUnitState.Skill, skill);
+ }
+ yield return null;
+ }
}
void OnJumpExit(EUnitState next)
|