うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】Animation の再生時間を取得する

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);
}