diff options
Diffstat (limited to 'Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs')
-rw-r--r-- | Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs b/Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs new file mode 100644 index 00000000..d7138516 --- /dev/null +++ b/Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs @@ -0,0 +1,114 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class MonsterAnimation : UnitAnimation +{ + public enum ELayer + { + Basic = 0, + + Count, + } + + // 动作名,和animator里的state对应 + public enum EAnimState + { + // layer 0 + Idle = 0, + Move, + Jump, + + HitLight, + HitAir, + Rise, + } + + public override void Initialize() + { + base.Initialize(); + + m_Animator = this.m_Owner.unitObj.GetComponent<Animator>(); + + m_Animator.speed = 0; + + m_LayerInfo = new AnimatorLayerInfo[2]; + m_LayerInfo[0] = new AnimatorLayerInfo(this, m_Animator, (int)ELayer.Basic, ELayer.Basic.ToString()); + //m_LayerInfo[1] = new AnimatorLayerInfo(this, m_Animator, ELayer.Attack); + + if (m_Animator == null) + { + LogHelper.LogError("没有挂Animator组件"); + } + + } + + public override void OnUpdate() + { + base.OnUpdate(); + + UpdateLayer(); + UpdateAnimation(); + UpdateRootMotion(); + } + + 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); + m_Animator.speed = 0; + } + + void UpdateRootMotion() + { + m_Owner.unitRootMotion.UpdateRootMotion(); + } + + public void AnimIdle() + { + this.CrossFade(EAnimState.Idle, 0.2f, 0); + } + + public void AnimHitLight() + { + this.Play(EAnimState.HitLight, 0, 0); + //m_Animator.CrossFade("HitLight", 0.05f, 0, 0, 0); + } + public void AnimHitAir() + { + this.Play(EAnimState.HitAir, 0, 0); + //m_Animator.CrossFade("HitLight", 0.05f, 0, 0, 0); + } + + public void AnimRise() + { + this.CrossFade(EAnimState.Rise, 0); + } + + private void Play(EAnimState animState, int layerIndex = 0, float normalizedTime = float.NegativeInfinity) + { + AnimatorLayerInfo layer = this.layers[layerIndex]; + if (layer == null) + return; + layer.OnPlay(animState.ToString(), normalizedTime); + } + + public void CrossFade(EAnimState 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.ToString(), normalizedTransitionDuration, normalizedTimeOffset, normalizedTransitionTime); + } + +} |