ぱふの自由帳

週2更新目指す技術ブログ。メインはUnity。最近、競プロ始めましたー!良ければフォローお願いします(`・ω・´)

Animationを使う時の注意 -Root Motion編-

はじめに

Root Motionを使う場面は様々あると思います。実際にオブジェクトを移動するアニメーションを作成したい場合や、Animatorで動かすオブジェクトをスクリプトでも動かす場合(参考サイトはこちら)等々...
しかし、注意が必要な場面が出てきます。というかハマりました。

では、さっそく見て行きましょう〜。

Root Motionの落とし穴

Root Motionなしパターン

下のGIFを見てください。これはpositionを(-2,0,0)→(2,0,0)に移動するアニメーションを設定しています。

  • Scale(1,1,1)のオブジェクト
    f:id:PafuOfDuck:20171002121407g:plain

  • Scale(0.5,0.5,0.5)のオブジェクト
    f:id:PafuOfDuck:20171002121402g:plain

どちらも同じようにX軸方向に+4だけ移動していることが確認できます。
一応、Animatorの設定については下の画像のようになっています。

f:id:PafuOfDuck:20171002123613p:plain

f:id:PafuOfDuck:20171002121958p:plain

Root Motionありパターン

さて、また下のGIFを見てください。これも同様にpositionを(-2,0,0)→(2,0,0)に移動するアニメーションを設定しています。
しかし、Root Motionを設定している点で異なっています。Root Motionの使い方についてはこちらで少し説明していますのでどうぞ。

  • Scale(1,1,1)のオブジェクト
    f:id:PafuOfDuck:20171002124621g:plain

  • Scale(0.5,0.5,0.5)のオブジェクト
    f:id:PafuOfDuck:20171002124616g:plain

今回はX軸の移動量が異なっていることが確認できると思います。数値で確認するとScale(0.5,0.5,0.5)の方が移動量が半分になっています。これは「Scaleを考慮した移動量に補完されているからかな?」と考えていますが...。真相は闇の中です。

注意点
Root Motionを使用するとAnimtionで設定した数値がオブジェクトのScaleによって変化(補完?)してしまうので注意!!

解決方法?

うーん...これを解決方法としても良いのかどうか分からないのですが二つほど。

  • 補完を考慮した数値をあらかじめ設定する(とてもじゃないが計算が面倒なのでオススメしません)

  • Scaleが(1,1,1)オブジェクトを作成し、Scale(0.5,0.5,0.5)のCubeを子オブジェクトに設定します。そして親オブジェクトにAnimatorを設定します。そうすることで間接的に子オブジェクトを動かします。

おわり

「なんで上手く動かないんじゃー!!」となって調べて見たところRoot Motionが原因でした(´・ω・`。)
解決策がとても微妙なので他の方法をご存知の方がいれば是非教えてください!

初心者の方や熟練者の方を問わずTwitterのフォローお待ちしています...(`・ω・´) ヨロシク!