本日は Unity の小ネタ枠です。
UnityでGenericリグのキャラクターモデルのアニメーションを共通化する手順を記事にします。
リグのアニメーションの共通化
Unityでは Humanoid という共通のリグフォーマットがあり、このフォーマットに関連付けられたアバターのアニメーションは共通化することができます。
blogs.unity3d.com
bluebirdofoz.hatenablog.com
一方で Generic のリグフォーマットであっても、リグの構造が一致していれば異なるファイル間でアニメーションを共通化することができます。
作成中のモンスター型モデルでアニメーションの共通化を試してみます。
Genericリグのキャラクターモデルのアニメーションの共通化
Genericリグのモデルであっても、アーマチュアの構造が一致していればメッシュオブジェクトの数が一致していなくてもアニメーションを共通化できます。
アニメーションを行うメッシュとアーマチュアを含んだ以下の3Dモデルファイルを用意します。
[Optimize Game Objects]ではアーマチュアのルートボーンを指定しておきます。
次に以下のようなアーマチュアとアニメーションを含んだ3Dモデルファイルを用意します。
[Optimize Game Objects]では先ほどと同様にアーマチュアのルートボーンを指定しておきます。
アニメーションを共通化できているかは[Animation]タブで確認できます。
再生確認をしたい任意のアニメーションを選択し、アバターアイコンから[Other..]を選択します。
プロジェクト中のゲームオブジェクト一覧が開くので、アニメーションを反映したいモデルを選択します。
アニメーションのプレビューを再生し、表示されたモデルが意図通りに動けば、アニメーションが共通化できています。
アニメーションの反映方法
AnimationController を新規作成し、取り込んだアニメーションを設定します。
反映したいモデルの[Controller]に作成した AnimationController を設定します。
シーンを再生し、反映したキャラクターモデルでアニメーションが再生されれば成功です。
3Dモデル出力時の注意点
Blender でアニメーション用の3Dファイルを出力した時、上手く共通化できないケースがありました。
例えば、以下のようにファイル出力時に[アーマチュア]のみを設定した場合です。
アーマチュアのみを出力した場合、アーマチュアの親オブジェクトが出力時に消えてしまい、構造が一致しなくなったためでした。
この事象は例え出力時に[メッシュ]を指定していても、メッシュオブジェクトが存在しない場合は同様に発生します。
以下の通り、アーマチュアの親オブジェクトが出力時に消えています。
空のメッシュオブジェクトを作成し、[アーマチュア]と[メッシュ]を出力することで問題を解消できます。
このモデルを取り込むと、以下の通り、アーマチュアの親オブジェクトが存在しており、階層が一致します。