Animationを使う時の注意 -Root Motion編-
はじめに
Root Motionを使う場面は様々あると思います。実際にオブジェクトを移動するアニメーションを作成したい場合や、Animatorで動かすオブジェクトをスクリプトでも動かす場合(参考サイトはこちら)等々...
しかし、注意が必要な場面が出てきます。というかハマりました。
では、さっそく見て行きましょう〜。
Root Motionの落とし穴
Root Motionなしパターン
下のGIFを見てください。これはpositionを(-2,0,0)→(2,0,0)に移動するアニメーションを設定しています。
Scale(1,1,1)のオブジェクト
Scale(0.5,0.5,0.5)のオブジェクト
どちらも同じようにX軸方向に+4だけ移動していることが確認できます。
一応、Animatorの設定については下の画像のようになっています。
Root Motionありパターン
さて、また下のGIFを見てください。これも同様にpositionを(-2,0,0)→(2,0,0)に移動するアニメーションを設定しています。
しかし、Root Motionを設定している点で異なっています。Root Motionの使い方についてはこちらで少し説明していますのでどうぞ。
Scale(1,1,1)のオブジェクト
Scale(0.5,0.5,0.5)のオブジェクト
今回はX軸の移動量が異なっていることが確認できると思います。数値で確認するとScale(0.5,0.5,0.5)の方が移動量が半分になっています。これは「Scaleを考慮した移動量に補完されているからかな?」と考えていますが...。真相は闇の中です。
注意点
Root Motionを使用するとAnimtionで設定した数値がオブジェクトのScaleによって変化(補完?)してしまうので注意!!
Root Motionを使用するとAnimtionで設定した数値がオブジェクトのScaleによって変化(補完?)してしまうので注意!!
解決方法?
うーん...これを解決方法としても良いのかどうか分からないのですが二つほど。
補完を考慮した数値をあらかじめ設定する(とてもじゃないが計算が面倒なのでオススメしません)
Scaleが(1,1,1)オブジェクトを作成し、Scale(0.5,0.5,0.5)のCubeを子オブジェクトに設定します。そして親オブジェクトにAnimatorを設定します。そうすることで間接的に子オブジェクトを動かします。
おわり
「なんで上手く動かないんじゃー!!」となって調べて見たところRoot Motionが原因でした(´・ω・`。)
解決策がとても微妙なので他の方法をご存知の方がいれば是非教えてください!