using System.Collections; using System.Collections.Generic; using UnityEngine; namespace MuHua { /// /// 动作动画控制器 /// [RequireComponent(typeof(Animator))] public class KinesisAnimator : MonoBehaviour { protected int layerIndex; protected string current; protected Animator animator; protected IKinesis kinesis; public virtual void Awake() => animator = GetComponent(); /// 设置动作 public virtual void SetKinesis(IKinesis kinesis) => this.kinesis = kinesis; /// 动画过渡 public virtual void Transition(int layerIndex, string name, float normalizedTransitionDuration = 0.1f) { animator.SetLayerWeight(this.layerIndex, 0); animator.SetLayerWeight(layerIndex, 1); this.layerIndex = layerIndex; Transition(name, normalizedTransitionDuration); } /// 动画过渡 public virtual void Transition(string name, float normalizedTransitionDuration = 0.1f) { if (current == name) { animator.Play(name); } else { animator.CrossFade(name, normalizedTransitionDuration); } current = name; } /// 设置参数 public virtual void SetBool(string name, bool value) => animator.SetBool(name, value); /// 设置参数 public virtual void SetFloat(string name, float value) => animator.SetFloat(name, value); /// 触发动画特效 public virtual void AnimationEffects() => kinesis?.AnimationEffects(); /// 动画结束(有后摇) public virtual void AnimationEnd() => kinesis?.AnimationEnd(); /// 动画退出(无后摇) public virtual void AnimationExit() => kinesis?.AnimationExit(); } }