以下の内容はhttps://hacchi-man.hatenablog.com/entry/2021/04/12/220000より取得しました。


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



以上の内容はhttps://hacchi-man.hatenablog.com/entry/2021/04/12/220000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14