いんでぃーづ

ゲームいろいろ、いろいろ自由

Unity : アニメーションとGameObjectの位置を同期させたい時に気をつけること

2019/01/15更新 - 利用環境:Unity2018.3

Mecanim(AnimatorController)はNavMeshAgentやCharacterControllerと一緒に使うケースがほとんどではないでしょうか。

その場合についてまわるのが
アニメーションに合わせてGameObjectのTransformを移動するか
という問題です。
思ったとおりの動作をさせるにはそれぞれに合った設定が必要になり、ハマることがあります。

参考素材はおなじみのアニメーションアセットを使っています。
いつもお世話になっております。

Mecanim Locomotion Starter Kit - Asset Store

Raw Mocap Data for Mecanim - Asset Store

ApplyRootMotionのチェック

3Dモデルが前方に歩いていくアニメーションを例にとります。

紹介したアセット Mecanim Locomotion Starter Kit のサンプルシーン (Assets/Locomotion Setup/TestScene) を開くと、すでにアニメーション用にセットアップしてある人物モデルがシーンに配置されています。

Playボタンを押してゲームを起動すると、十字キーを押すことで移動ができます。

この人の AnimatorController を見るとチェックボックスがあり、

f:id:sugar_affordance:20190115134715p:plain

チェックが入っていると、アニメーションによってモデル自体が前方に移動していきます。

f:id:sugar_affordance:20160514095140g:plain

このチェックを外すと、アニメーションによってGameObjectの位置は変わらなくなります。

f:id:sugar_affordance:20160514095134g:plain

このチェックボックスは、アニメーションに設定されている位置情報をそのままTransformの位置更新に適用するか を設定するパラメータです。
AnimationClip アセットが、ルート位置が移動するようなものだった場合、それがそのままTransformに影響します。

チェックを入れてもモデルの位置が移動しない場合、そもそも使っている AnimationClip 自体が位置を変更しない類のものだと思われます。パントマイマーのアニメーしょんとかがそうですね。違うよね。

アニメーションとTransformの位置が同期してくれない場合

単にApply Root MotionをONにしただけでは、位置の同期がうまくいかない場合があります。

例としてダウンロードしたアニメーションアセット Raw Mocap Data の Run_JumpUpLow_Stride_Run を使ってみます。

インスペクタービューでアニメーションを表示し、Animationsタブを選択することでパラメータを見てみると、

f:id:sugar_affordance:20190115142016p:plain

下部のチェックリストに何もチェックが入っていない状態です。
この状態でアニメーションとTransformの値がどうなっているか見てみます。

f:id:sugar_affordance:20160514095151g:plain

ちゃんとアニメーションに合わせてTransformの位置も変わっていますね。
この設定の Root Transform Position (Y)Bake Into Pose にチェックを入れて実行してみましょう。

f:id:sugar_affordance:20160514095210g:plain

インスペクタの値を眺めていると、Y座標が0のままであることがわかります。

この設定で何がおきるかというと例えば、コライダーを付けてアニメーションさせている場合、コライダーのY座標が変わらない ということがおきます。
つまり、ジャンプしているように見えるのに、足元の障害物に引っ掛かってしまうという状況が発生してしまいます。

BakeIntoPoseのチェックを外すことで、アニメーションとGameObjectの位置の同期がとれます。
もちろんApplyRootMotionのチェックも入れる必要があります。

もしアニメーションとTransformの動きが一致しないというときは、AnimationClipの設定も確認しましょう。


“Unity” and Unity logos are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere, and are used under license.


免責事項

当サイトの広告バナー、リンクによって提供される情報、サービス内容について、当サイトは一切の責任を負いません。

また、当サイトの情報を元にユーザ様が不利益を被った場合にも、当サイトは一切の責任を負いません。

すべて自己責任でお願いします。