遷移する可能性のあるアニメーションのステートは遷移中である可能性を考慮しつつ保存しなければならない(当たり前だ)

アニメーションのポーズ機能を作りたくて、

stateInfo = animator.GetCurrentAnimatorStateInfo(targetLayer);

みたいな処理を書き、

animator.Play(stateInfo.fullPathHash, targetLayer, stateInfo.normalizedTime);

みたいにして使っていた。しかし、デバッグ中に、アニメーションが正常に再生されない問題が発生した。

原因を探ると、どうもTriggerで wait -> move みたいに遷移を作っていたのがうまく動いていないみたいだった。

今回はwaitからmoveへの繊維は2フレーム程度で終わるようにしていたのだが、利用者がボタンを連打したりすることで、waitからmoveへの遷移中にポーズ処理が発行される場合があることがわかった。

対策は以下

if(animator.IsInTransition(targetLayer))
    {
        stateInfo[targetLayer] = animator.GetNextAnimatorStateInfo(targetLayer);
    }
    else
    {
        stateInfo[targetLayer] = animator.GetCurrentAnimatorStateInfo(targetLayer);
    }

アニメーションが遷移中は遷移先のステートを保存するようにした。今の所これで同様の不具合は出ていないので大丈夫だと思う。