Animation の再生時間を知るためには GetCurrentAnimatorStateInfo
で
AnimatorStateInfo を取得し、length の値を見ることで確認できる
しかし、 animator.Play
のあと直ぐに GetCurrentAnimatorStateInfo
を呼び出しても
正しい値を取得できない
var animator = gameObject.GetComponent<Animator>(); animator.Play("Hoge"); var state = animator.GetCurrentAnimatorStateInfo(0); Debug.Log(state.length); // 正しい値が確認できない
そのために、コルーチンで 1フレーム待ったり
private IEnumerator WaitAnimationImpl() { var animator = gameObject.GetComponent<Animator>(); animator.Play("Hoge"); yield return null; var state = animator.GetCurrentAnimatorStateInfo(0); yield return new WaitForSeconds(state.length); }
Animator.Update
を呼び出して animator の状態を更新してやる必要がある
Animator.Update
を利用すれば コルーチンじゃなくても、再生時間を取得できるので便利
private IEnumerator WaitAnimationImpl() { var animator = gameObject.GetComponent<Animator>(); animator.Play("Hoge"); animator.Update(0f); var state = animator.GetCurrentAnimatorStateInfo(0); yield return new WaitForSeconds(state.length); }