自分用Unityメモ:アニメーションの終了を待つ
AnimatorStateInfo を使用することで、
再生中のアニメーションの情報を得ることができます。
AnimatorStateInfo.Length でアニメーションの再生時間がわかるので
それを使ってモーション待ちが出来たりします。
//プロパティで読み取り専用にするよ private bool m_isMotion; public bool IsMotion{ get{ return m_isMotion; } } //モーション開始と一緒に呼ぶコルーチン IEnumerator AttackMotionCoroutine() { //ホントはAnimatorは先に取得しておいた方が良いです Animator myAnimator = GetComponent<Animator>(); m_isMotion = true; //遷移を待つ float transitionTime = 0; while (myAnimator.IsInTransition(0)) { transitionTime += Time.deltaTime; yield return 0; } //念のためアニメーションのステートをUpdate //無いと遷移前ステートを取得しちゃうことがあります。。。 myAnimator.Update(0); //モーション時間分だけ待つ AnimatorStateInfo stateInfo = myAnimator.GetCurrentAnimatorStateInfo(0); yield return new WaitForSeconds(stateInfo.length - transitionTime); m_isMotion = false; }
ただ、割と横着な方法なので
モーションごとにインターバル設定した方が
確実性はあると思います。。。