遷移する可能性のあるアニメーションのステートは遷移中である可能性を考慮しつつ保存しなければならない(当たり前だ)
アニメーションのポーズ機能を作りたくて、
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); }
アニメーションが遷移中は遷移先のステートを保存するようにした。今の所これで同様の不具合は出ていないので大丈夫だと思う。