こんにちは、ユーゴです。
今回は、Unityでアニメーター(Animator)を使っていたときに起きた問題と解決策を紹介します。
ちなみにタイトルには「サイクルオフセットが使えない」とありますが、厳密には「欲しかったのがサイクルオフセットじゃない」です。
やりたいこと
アニメーターで「アニメA → アニメB」に遷移する時、アニメBの冒頭数秒を切り取りたい。
また、「アニメAが10秒・アニメBが10秒」の時、アニメBの冒頭5秒(任意)を切り取って「アニメAが10秒・アニメBが5秒(任意)」にしたい
やったこと&起きた問題
サイクルオフセットを使う(0~1の割合で指定。10秒なら0.5で5秒)。
しかし、上記の例だと、アニメBが10秒のまま変わらない。
原因
Cycle Offsetは、開始と終了をずらす。つまり、カットしたかった冒頭は、末尾に付け足される。
解決策
Cycle Offsetではなく、「Transition Offset」を使う。同じく、0~1の割合で指定。
ちなみに
私は、VRChatでアニメーターをいじっている時に遭遇した問題でした。アニメーター内部に遅延処理を入れたかったため、10秒ある空のアニメーションを用意し、望みの秒数だけそれを切り取って実装しようとしました。しかし、10秒という時間が変わらず、しかも空のアニメーションなので何が起きているのか分かリませんでした...
結局、別バージョンで別プロジェクトを立ち上げ、2Dにした上でオブジェクトを用意し実行しました。その結果、そもそもサイクルオフセットの使い方が違ったということでした...(T T)
まとめ
いかがだったでしょうか。今回は、アニメーターでサイクルオフセットが使えないという問題の解決を紹介しました。厳密には「欲しかったのがサイクルオフセットじゃない」でしたが...
このように、初歩的なミス紹介から、かなりニッチで高度なテクニックまで幅広く扱っていく予定です。もし気に入っていただけましたら、LGTM&フォローの方よろしくお願いいたします。