今回はアニメーションを利用するときにキャラを制御するのに便利な方法を見つけたので紹介したいと思います。「ルートアニメーションって何?」という方から私と同じように利用を諦めていた方の参考になれば幸いです。
ルートモーションとは
もはやアンリアルエンジンやUnityでは共通語になっているルートモーションですが
アニメーションで動かした値をゲーム上のキャラクターの座標にも反映する機能です。
アニメーションに合わせて実際にキャラが動きます!
なぜ「ルートモーション」が必要なのか
ゲームではキャラクターがローリングしたり、攻撃したりするときに
キャラが移動することってありますよね?
以前投稿したものですが
こんな感じでアニメーションに合わせて動かしたりしますよね
#スーパーゲ制デー #ゲーム制作
和風アクションゲームを開発中です!現在プレイヤー動作の見直し中なので
主にその進捗をアップしています! https://t.co/Vcw46ciYqa pic.twitter.com/4NiwTRVCvW— Tadapy@個人ゲーム制作 (@tadapy88) August 12, 2023
そういったときに、ゲーム上で
プログラムで座標を移動分だけ動かしながら&アニメーションを再生する
ってなると結構見た目とその調整値を同じにすることって意外と手間ですし、意外と調整も難しいです。
そんなときこそ「ルートモーション」
そういうときに便利なのが
アニメーション側で動かした分だけゲーム上の座標にも反映する機能が「ルートモーション」という機能です。
アニメーションで動かした分だけ勝手に動いてくれる
のはすっごい楽です!
基本編「ルートモーションを反映する」
アニメーションを再生するときに利用するAnimatorに「Apply Root Motion」という設定項目があるのでそこをONにします。
するとアニメーション側でAnimatorを保持しているGameObjectの「Transform」を変更すると
アニメーションで移動した分だけ移動してくれます!
キャラクターがアニメーションで動かした分だけ動いてるぅぅ!
問題点「オブジェクトのAnimatorがルートでない」場合
しかしAnimatorがルートになっているゲームオブジェクトでない限り
この移動値は反映できないため構造によっては問題が発生するケースがあります。
実際にどのような状態で問題が出るかというと
「Animatorを持つゲームオブジェクトを子として保持している場合」などです
Transformの値は変わっているけれど
子のオブジェクトの差分が変わってるだけになっちゃうんですよね…
かくいう私も使いたいと思いつつもこれのせいで
使いものにならないと思っていて今まで使っていませんでした。
アニメーションと実際の移動値を合わせたり色々負担になりますから…
ついに「ルートじゃないAnimatorの解決方法」を見つけた
そして今回たまたま調べていると
なんとルートモーションで動かした値を独自にカスタマイズできることが判明しました!
しかも思ったよりもめちゃくちゃ簡単です!
次のページへ
次は実際にカスタマイズする方法を紹介します!
コメント