覚え書きブログ

Unity覚え書き(パーツごとのモーション)

以前動かしてみたUnityのキャラクターに、上半身と下半身とで異なるモーションを割り当てるモーションブレンディングを試してみた。
hirotaka-hachiya.hatenablog.com

キャラクターの動作コントローラとしてLocomotion Controllerを使用した場合、下図のように腕を振りながら歩いたり走ったりして移動する。ゲームでは、移動しながら、銃を売ったり、携帯電話で話したり、頭を掻いたりするようなモーションが必要になる。そのようなモーションは、このLocomotion Controllerにて、下半身は移動のモーションのまま、上半身を様々なモーションに変えることにより、簡単に実現できそうである。
f:id:hirotaka_hachiya:20160617001931p:plain

今回は、LayerとMaskを用いて、上半身と下半身で異なるモーションを割り当ててみた。手順は以下の通りである。

1)上半身と下半身のマスクを追加
プロジェクトタブのAssetsにて、右クリックし「Create->Avatar Mask」を選択し、Avator Maskを追加する。ここでは、LowerbodyとUpperbodyという名前にしている。
f:id:hirotaka_hachiya:20160616235527p:plain
Lowerbodyは、下図のように、下半身にマスクをかける。同様にUpperbodyは上半身にマスクをかける。
f:id:hirotaka_hachiya:20160616235841p:plain

Avator Maskの詳細は、下記を参照。
http://docs.unity3d.com/ja/current/Manual/class-AvatarMask.html

2)Base Layerに、上半身のマスクをかける
下図のように、Base LayerのMaskに「Upperbody」を設定する。
f:id:hirotaka_hachiya:20160617000100p:plain
すると、次のようにキャラクターの上半身は、固まった状態になる。
f:id:hirotaka_hachiya:20160617000203p:plain

3)上半身用のLayerを追加
下図のように、Upperbodyというレイヤーを追加し、Maskに「Lowerbody」を設定する。また、Weightは1に設定する。
f:id:hirotaka_hachiya:20160617000510p:plain

4)上半身用のLayerに、適当なモーションを追加
今回は、頭を掻く動作のHuge Mocap Libraryの81_01を下図のように、追加した。
f:id:hirotaka_hachiya:20160617000923p:plain

そして、下図のように、モーションの開始と終了時刻を設定し、「Loop Time」をチェックする。
f:id:hirotaka_hachiya:20160617001224p:plain

これにより、下図のように、頭を掻きながら歩き回るような動作をさせることができる。
f:id:hirotaka_hachiya:20160617001525p:plain

ちなみに、レイヤーのMaskとWeightを調整することにより、歩行時の腕振りと、頭を掻く動作を混ぜる(motion blending)ことができる。さらに、マスクするパーツを細かく調整することにより、下図のように、右腕は頭を掻きながら、左腕は腕振りをするなどの組み合わせもできる。これで、様々な動作を作れそうである。
f:id:hirotaka_hachiya:20160617003005p:plain