以前動かしてみたUnityのキャラクターに、上半身と下半身とで異なるモーションを割り当てるモーションブレンディングを試してみた。
hirotaka-hachiya.hatenablog.com
キャラクターの動作コントローラとしてLocomotion Controllerを使用した場合、下図のように腕を振りながら歩いたり走ったりして移動する。ゲームでは、移動しながら、銃を売ったり、携帯電話で話したり、頭を掻いたりするようなモーションが必要になる。そのようなモーションは、このLocomotion Controllerにて、下半身は移動のモーションのまま、上半身を様々なモーションに変えることにより、簡単に実現できそうである。
今回は、LayerとMaskを用いて、上半身と下半身で異なるモーションを割り当ててみた。手順は以下の通りである。
1)上半身と下半身のマスクを追加
プロジェクトタブのAssetsにて、右クリックし「Create->Avatar Mask」を選択し、Avator Maskを追加する。ここでは、LowerbodyとUpperbodyという名前にしている。
Lowerbodyは、下図のように、下半身にマスクをかける。同様にUpperbodyは上半身にマスクをかける。
Avator Maskの詳細は、下記を参照。
http://docs.unity3d.com/ja/current/Manual/class-AvatarMask.html
2)Base Layerに、上半身のマスクをかける
下図のように、Base LayerのMaskに「Upperbody」を設定する。
すると、次のようにキャラクターの上半身は、固まった状態になる。
3)上半身用のLayerを追加
下図のように、Upperbodyというレイヤーを追加し、Maskに「Lowerbody」を設定する。また、Weightは1に設定する。
4)上半身用のLayerに、適当なモーションを追加
今回は、頭を掻く動作のHuge Mocap Libraryの81_01を下図のように、追加した。
そして、下図のように、モーションの開始と終了時刻を設定し、「Loop Time」をチェックする。
これにより、下図のように、頭を掻きながら歩き回るような動作をさせることができる。
ちなみに、レイヤーのMaskとWeightを調整することにより、歩行時の腕振りと、頭を掻く動作を混ぜる(motion blending)ことができる。さらに、マスクするパーツを細かく調整することにより、下図のように、右腕は頭を掻きながら、左腕は腕振りをするなどの組み合わせもできる。これで、様々な動作を作れそうである。