読者です 読者をやめる 読者になる 読者になる

テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

Unity5でRoot Motionを利用したアニメーションと、その注意点について

目次

Root Motionを利用したアニメーション

Unity5でGenerate Root Motion Curvesが追加されたお陰で、このようなアニメーションを親オブジェクト無しでも作成出来るようになりました。

f:id:tsubaki_t1:20150308011258g:plain

Unity4ではエディターで自作したアニメーション*1は常に親オブジェクトとの相対座標を見ていたため、汎用的にその場でアニメーションするギミックを用意したい場合は、空の親オブジェクトを設定する必要がありました。

f:id:tsubaki_t1:20150308011339p:plain

Unity5よりUnityエディターでRoot Motion自体を動かすアニメーションの作成が可能になり、単体でも出来るようになった…なる話です。

f:id:tsubaki_t1:20150308014610p:plain

Root Motionのあるアニメーションを作成する

Root Motionのあるアニメーションを作成する手順は非常に簡単です。

  1. 移動の含まれる(Transform.positionやrotationが変化する)Animationを作成する。

    f:id:tsubaki_t1:20150308011922p:plain

  2. Animationを選択してGenerate Root Motion Curveボタンを押す。

    f:id:tsubaki_t1:20150308011907p:plain

  3. AnimatorのApply Root Motionにチェックを入れる。

    f:id:tsubaki_t1:20150308012035p:plain

これで、その場を基準にアニメーションを行うアニメーションが出来ます。

Root Motionの機能

Root Motionは割と面白い機能です。

例えばオブジェクトの上下だけでなく前進部分も設定してやることで、アニメーションでオブジェクトの移動量を調整することが出来ます。つまり初期位置に戻らないアニメーションの場合は移動します。

例えば「ジャンプ時はグっと移動して、でも着地時(ペタンコになってるタイミング)は移動しない」のようなアニメーションタイミング的に調整する挙動を手軽に作成できます。

f:id:tsubaki_t1:20150308013621g:plain

なお、現在Write Defaultsがバグっていて動作しないっぽいので、オブジェクトを非アクティブに設定すると初期位置が破綻し変な所からアニメーションをスタートしてしまいます。(その為、アニメーションを止めたければAnimatorとRendererをdisableにする措置がお勧めです)

それとRectTransformには使えなかったと思います。

Unity5への移行とApply Root Motion

Generate Root MotionしていないのにApply Root Motionにチェックが入っている場合、アニメーションはRoot座標を動かさずその場でアニメーションを行います。

Unity4はAnimatorを追加した場合だいたいApply Root Motionにチェックが入っていたので、Unity5へ移行した際に座標移動せずビクビク震えだしたら要確認です。

f:id:tsubaki_t1:20150308012631g:plain

なお、Generate Root Motion後でApply Root Motionのチェックを外すと、アニメーションは今までどおり親オブジェクトをRootとして扱います。

*1:モーションを取り込んだ場合は普通に使えました