using System.Collections; using System.Collections.Generic; using UnityEngine; // 播放动画,执行帧事件 [DisallowMultipleComponent] public class UnitAnimation : UnitComponent { // animator trigger值,切换动画 public enum ETrigger { Nein = 0, ToIdle , ToMove , ToSpawn , ToDie , ToHitAir , ToHitAirAir, ToHitKnockDown, ToJump, ToWalk, ToAttack, ToRise, ToStinger, ToTurn, } // animator状态 public enum EAnimState { Idle, Move, Jump, Hit, Attack, Rise, Stinger, Turn, } public Dictionary triggers = new Dictionary() { { EAnimState.Idle, ETrigger.ToIdle}, { EAnimState.Move, ETrigger.ToMove}, { EAnimState.Jump, ETrigger.ToJump}, { EAnimState.Attack, ETrigger.ToAttack}, { EAnimState.Rise, ETrigger.ToRise}, { EAnimState.Stinger, ETrigger.ToStinger}, { EAnimState.Turn , ETrigger.ToTurn}, }; public Animator animator { get { return m_Animator; } } private Animator m_Animator; private TimelineEvent m_Timeline; private UnitActionData m_ActionData; public AnimatorStateInfo stateInfo { get { return m_Animator.GetCurrentAnimatorStateInfo(0); } } public EAnimState curState { get { return m_CurState; } } private EAnimState m_CurState; public float playbackTime { get { return m_PlaybackTime; } } private float m_PlaybackTime; public override void Initialize() { base.Initialize(); m_Timeline = this.m_Owner.unitObj.GetOrAddComponent(); m_Animator = this.m_Owner.unitObj.GetComponent(); if(m_Animator == null) { LogHelper.LogError("没有挂Animator组件"); } } public void Play(EAnimState state) { m_CurState = state; ETrigger trigger = triggers[state]; string toAnim = trigger.ToString(); m_Animator.SetTrigger(toAnim); m_Animator.speed = 0; m_PlaybackTime = 0; m_Owner.unitRootMotion.Reset(); } public override void OnUpdate() { base.OnUpdate(); m_PlaybackTime += Time.deltaTime; m_Animator.speed = 1; m_Animator.Update(Time.deltaTime); m_Animator.speed = 0; m_Owner.unitRootMotion.UpdateRootMotion(); } }