如何判断animator播放某一个动画播放完毕
//playAnimationName 将要播放动画的名字 animationTime 播放到某一时刻(0 - 1) action回掉
//enemyAnimator.GetCurrentAnimatorStateInfo(0).normalizedTime 当返回的值大于1的时候该动画已经播放完毕
public IEnumerator PlayAnimation(string playAnimationName, float animationTime, System.Action action) { SetPlayAnimation(playAnimationName, true); while (!enemyAnimator.GetCurrentAnimatorStateInfo(0).IsName(playAnimationName)) { yield return null; } while (enemyAnimator.GetCurrentAnimatorStateInfo(0).normalizedTime < animationTime) { yield return null; } //Debug.Log("播放完毕"); SetPlayAnimation(playAnimationName, false); action?.Invoke(); }
分析:
//为什么我会先判断animator是否进入我们想要播放的动画 比如我们想播放attack这个动画 但是当它在idle转向attack的时候 animator会有一个动画融合
//当开始播放attack动画的时候他不会立即进入而是回在idle -> attack的过程中 而返回的名字仍然是idle 所以要判断是否进入attack动画
while (!enemyAnimator.GetCurrentAnimatorStateInfo(0).IsName(playAnimationName)) { yield return null; }