如何判斷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; }