MRが楽しい

MRやVRについて学習したことを書き残す

UnityでGenericリグのキャラクターモデルのアニメーションを組み合わせる

本日は Unity の小ネタ枠です。
UnityでGenericリグのキャラクターモデルのアニメーションを組み合わせる手順を記事にします。
f:id:bluebirdofoz:20201023195848j:plain

Genericリグでキャラクターモデルのアニメーションを扱う方法は以下の前回記事を参考にしてください。
bluebirdofoz.hatenablog.com

UnityでGenericリグのキャラクターモデルのアニメーションを組み合わせる

Blenderでのアニメーション作成

Blenderで以下のような2つのアニメメーションを作成して組み合わせてみます。
・基本の立ちアニメーション
f:id:bluebirdofoz:20201023195901j:plain

・尻尾を振るアニメーション
f:id:bluebirdofoz:20201023195915j:plain

組み合わせる2つのアニメーションは同じステップ数である必要はありません。
f:id:bluebirdofoz:20201023195924j:plain

尻尾を振るアニメーションは尻尾のみが動くアニメーションです。
今回は基本の立ちアニメーションに尻尾の部分のみ、尻尾を振るアニメーションを上書きして組み合わせます。
f:id:bluebirdofoz:20201023195934j:plain

これらのアニメーションを持つ3Dモデルファイルを FBX 形式で出力します。
f:id:bluebirdofoz:20201023195945j:plain

Unityへの取り込みとアニメーションコントローラの作成

Unity に出力した FBX ファイルを取り込みます。
Inspector ビューの[Animation]タブから作成したアニメーションが取り込まれていることを確認します。
f:id:bluebirdofoz:20201023195955j:plain

アニメーションを組み合わせるためのアニメーションコントローラを作成します。
右クリックから[Create -> Animatior Controller]でアニメーションコントローラを作成できます。
f:id:bluebirdofoz:20201023200005j:plain

作成したアニメーションコントローラを選択して[Animator]画面を開き、基本の立ちアニメーションを登録します。
ここに尻尾を振るアニメーションを重ね合わせてみます。
f:id:bluebirdofoz:20201023200015j:plain

アニメーションマスクの作成

アニメーションの尻尾の部分のみを上書きするため、アバターマスクを作成します。
右クリックから[Create -> Avatar Mask]でアバターマスクを作成できます
f:id:bluebirdofoz:20201023200026j:plain

作成したアバターマスクを選択して Inspector ビューを開きます。
今回は Generic リグのアバターをマスクするので、[Transform]パネルを開き、[Use skeleton from]をクリックします。
アバターを持つオブジェクトの一覧が表示されるので、取り込んだキャラクターモデルのアバターを選択します。
f:id:bluebirdofoz:20201023200038j:plain

この状態で[Import skeleton]を実行すると、リグの構造が読み込まれます。
f:id:bluebirdofoz:20201023200048j:plain

マスクで利用したいリグのみにチェックを付けるようにします。
今回は尻尾のアニメーションを反映させたいので、尻尾のリグのみを選択したアバターマスクにします。
[Expand All]で一旦全てのチェックを外します。
f:id:bluebirdofoz:20201023200057j:plain

その後、尻尾の部分のリグを全てチェックします。
これで尻尾のリグのみをマスクするアバターマスクができました。
f:id:bluebirdofoz:20201023200108j:plain

アニメーションコントローラのレイヤー作成

次にアニメーションを組み合わせるため、アニメーションコントローラにレイヤーを作成します。
[Animator]画面を開き、[Layers]タブの[+]ボタンをクリックします。
f:id:bluebirdofoz:20201023200120j:plain

新規レイヤーが作成されるので、[歯車]アイコンをクリックしてレイヤーの設定を行います。
各設定項目の説明は以下の通りです。

Weight

アニメーションを適用する重み付けです。
0 ~ 1 が設定可能で、例えば Blending:Override で Weight:1 を設定した場合、アニメーションは完全に上書きされます。

Mask

アニメーションを反映するリグを指定するアバターマスクを設定します。

Blending

アニメーションの組合せの方法を指定できます。
Override の場合、他レイヤーのアニメーションを無視してアニメーションを上書きします。
Additive の場合、他レイヤーのアニメーションに加算される形でアニメーションを適用します。

Sync

ステートやトランジションを他のレイヤーと同期します。
同期するレイヤーは[Source Layer]で指定します。

Timing

有効な場合、同期されたレイヤーにあるアニメーションの長さを調整できるようになります。
組み合わせるアニメーションの長さが異なる場合、これにチェックを入れることで別々にアニメーションの長さを調整できます。
チェックを入れない場合、同期されたレイヤーのアニメーションの長さに合わせて組合せのアニメーションが再生されます。

IK Pass

IKパスを有効化します。

docs.unity3d.com

今回は以下の通り設定しました。

Weight:1.0
Mask:先程作成した尻尾用のアバターマスク
Blending:Override
Sync:True
Timing:True
Source Layer:Base Layer
IK Pass:False

f:id:bluebirdofoz:20201023200145j:plain

[Base Layer]で基本の立ちアニメーションを設定したパネルを選択して Inspector ビューを開きます。
[Motion]の項目に、尻尾を振るアニメーションを登録します。
f:id:bluebirdofoz:20201023200155j:plain

これで2つのアニメーションが組み合わせることができました。
アニメーションコントローラをキャラクターモデルに設定して動作を確認します。
f:id:bluebirdofoz:20201023200205j:plain

シーンを再生したとき、基本の立ちアニメーションと尻尾を振るアニメーションが組み合わさったアニメーションが再生されれば成功です。
f:id:bluebirdofoz:20201023200213j:plain