【Unity】Humanoid / Genericアニメーションについての基礎知識

Humanoid / GenericアニメーションとAvatarについての基礎知識です。

HumanoidとAvatarの概念

Humanoidは、人型のモデル用に作られたモーションを他の人型モデルにも適用できるようにする仕組みです。

例えば今、人型のモデルAの左肩のGameObject「LeftShoulder」を回転させるモーションAがあるとします。
そしてこのモーションAを他の人型モデルBに適用することを考えます。
人型であればモデルBにも「左肩」は必ず存在するはずなので、本質的にはこのモーションは適用できるはずです。

しかし、モーションファイルが持っている情報はあくまでGameObject「LeftShoulder」を回転させるという情報なので、
モデルAのGameObject名や階層構造がモデルBと一致しないとモーションAを適用することはできません。

そこでHumanoidは、「LeftShoulder」は「左肩」であるという対応付けを行います。
つまり個別のモーションで定義した名前をHumanoidで定義されている名前と紐付けて、モーションを使いまわせるようにします。
この対応付けの情報を持つのがAvatarというファイルです。

Unityでは下記のような画面でこの対応付けを行います。

f:id:halya_11:20190129225705p:plain:w400

Genericの概念

HumanoidのようにGameObjectと人型の部位との対応付けを行わない場合、
このモーションはGenericであるといいます。

この場合モーションは「LeftShoulder」を回転させる、という情報をそのまま持つことになります。
AvatarはHumanoidのようにいろんな情報を持たず、Root Nodeの情報だけを持ちます。

設定してみる

HumanoidとGenericについてもう少し具体的に理解するために、
それぞれの設定をした時に生成されるAnimationファイルがどのように変化するかを見てみます。

まず、モーションのImport SettingsからAnimation TypeをGenericに設定した状態でApplyします。

f:id:halya_11:20190129231215p:plain:w400

モーションはUnity-chanのものを使っています。
この状態でAnimationをみてみると、

f:id:halya_11:20190129231336p:plain:w250

Transformをアニメーションさせていることがわかります。

次に、Animation TypeをHumanoidに設定した状態でApplyします。
そして同じようにAnimationをみてみると、

f:id:halya_11:20190129231631p:plain:w250

Humanoidによる汎用的なパラメータに切り替わったことがわかります。

Avatarの使いまわし

例えばUnity-chanのようにモデルのファイルとモーションのファイルが別れている場合、
全てのモデルファイルとモーションファイルにHumanoidの設定をしなければいけません。

これはなかなか大変な作業だし、ミスの原因にもなります。

このような場合、Import SettingsのAvatar DefinitionをCopy From Other Avatarにすると、
他のファイルで設定したAvatarをSourceに設定して使いまわすことができます。

f:id:halya_11:20190129232926p:plain:w400

参考

docs.unity3d.com

docs.unity3d.com