using System.Collections; using System.Collections.Generic; using UnityEngine; // 控制动画播放,执行帧事件 [DisallowMultipleComponent] public class UnitAnimation : UnitComponent { // 动画 public enum EAnimState { Idle, Move, Jump, Hit, Attack, Rise, Stinger, Turn, } public enum ELayer { Basic = 0, Attack = 1, } 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 string GetTrigger(EAnimState state) { return "To" + state.ToString(); } public void Play(EAnimState state) { m_CurState = state; m_Animator.SetTrigger(GetTrigger(state)); 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(); } }