MRが楽しい

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

UnityでGenericリグのキャラクターモデルのアニメーションを共通化する

本日は Unity の小ネタ枠です。
UnityでGenericリグのキャラクターモデルのアニメーションを共通化する手順を記事にします。

リグのアニメーションの共通化

Unityでは Humanoid という共通のリグフォーマットがあり、このフォーマットに関連付けられたアバターのアニメーションは共通化することができます。
blogs.unity3d.com
bluebirdofoz.hatenablog.com

一方で Generic のリグフォーマットであっても、リグの構造が一致していれば異なるファイル間でアニメーションを共通化することができます。
作成中のモンスター型モデルでアニメーションの共通化を試してみます。
f:id:bluebirdofoz:20201016222355j:plain

Genericリグのキャラクターモデルのアニメーションの共通化

Genericリグのモデルであっても、アーマチュアの構造が一致していればメッシュオブジェクトの数が一致していなくてもアニメーションを共通化できます。
f:id:bluebirdofoz:20201016222407j:plain

アニメーションを行うメッシュとアーマチュアを含んだ以下の3Dモデルファイルを用意します。
[Optimize Game Objects]ではアーマチュアのルートボーンを指定しておきます。
f:id:bluebirdofoz:20201016222421j:plain

次に以下のようなアーマチュアとアニメーションを含んだ3Dモデルファイルを用意します。
[Optimize Game Objects]では先ほどと同様にアーマチュアのルートボーンを指定しておきます。
f:id:bluebirdofoz:20201016222430j:plain

アニメーションを共通化できているかは[Animation]タブで確認できます。
再生確認をしたい任意のアニメーションを選択し、アバターアイコンから[Other..]を選択します。
f:id:bluebirdofoz:20201016222440j:plain

プロジェクト中のゲームオブジェクト一覧が開くので、アニメーションを反映したいモデルを選択します。
f:id:bluebirdofoz:20201016222453j:plain

アニメーションのプレビューを再生し、表示されたモデルが意図通りに動けば、アニメーションが共通化できています。
f:id:bluebirdofoz:20201016222504j:plain

アニメーションの反映方法

AnimationController を新規作成し、取り込んだアニメーションを設定します。
f:id:bluebirdofoz:20201016222513j:plain

反映したいモデルの[Controller]に作成した AnimationController を設定します。
f:id:bluebirdofoz:20201016222523j:plain

シーンを再生し、反映したキャラクターモデルでアニメーションが再生されれば成功です。
f:id:bluebirdofoz:20201016222544j:plain

3Dモデル出力時の注意点

Blender でアニメーション用の3Dファイルを出力した時、上手く共通化できないケースがありました。
例えば、以下のようにファイル出力時に[アーマチュア]のみを設定した場合です。
f:id:bluebirdofoz:20201016222554j:plain

アーマチュアのみを出力した場合、アーマチュアの親オブジェクトが出力時に消えてしまい、構造が一致しなくなったためでした。
f:id:bluebirdofoz:20201016222604j:plain

この事象は例え出力時に[メッシュ]を指定していても、メッシュオブジェクトが存在しない場合は同様に発生します。
f:id:bluebirdofoz:20201016222623j:plain

以下の通り、アーマチュアの親オブジェクトが出力時に消えています。
f:id:bluebirdofoz:20201016222633j:plain

空のメッシュオブジェクトを作成し、[アーマチュア]と[メッシュ]を出力することで問題を解消できます。
f:id:bluebirdofoz:20201016222650j:plain

このモデルを取り込むと、以下の通り、アーマチュアの親オブジェクトが存在しており、階層が一致します。
f:id:bluebirdofoz:20201016222658j:plain