【Unity】特定部位だけモーションを無効化するAvatarMaskの基礎知識

UnityのAvatarMaskについての基礎知識をまとめました。

Unity2018.2.11

AvatarMask?

AvatarMaskとは、特定の部位にだけモーションを適用するための機能です。
実際の用途としては下記の二つが挙げられます。

  1. アニメーションのインポート時に設定してアニメーションのキーが打たれないようにする
  2. アニメーション再生時に設定してアニメーションの合成などに使う

AvatarMaskの作成・設定

AvatarMaskはProjectビューで右クリック > Create > AvatarMaskで作れます。
マスクの設定はAvatarMaskのインスペクタから行います。

Humanoidの場合は無効化したい部位をクリックして赤い状態にします。

f:id:halya_11:20190201011252p:plain:w400

Genericの場合はUse skeleton fromにAvatarを入れてImport Skeletonを押します。
そして無効化したい部位のGameObject名のチェックを外します。

f:id:halya_11:20190201004751p:plain:w400

これでAvatarMaskの設定ができました。

インポート時のマスク

それではアニメーションのインポート時にAvatarMaskを使ってみます。
まず、走っているモーションを普通に再生できるようにAnimator Controllerをセットアップします。

f:id:halya_11:20190201005743g:plain

そしてこのモーションのImport SettingsのAnimationタブのMaskからAvatarMaskを設定します。
DefinitionをCreate From Other MaskにするとAvatarMask欄が現れます。

f:id:halya_11:20190201010612p:plain:w400

試しに腕だけ動かないようにするとこのようになります。

f:id:halya_11:20190201010514g:plain

ランタイムでのマスク

次にアニメーション再生時にAvatarMaskを使ってアニメーションを合成してみます。
まず、走っているモーションを普通に再生できるようにAnimator Controllerをセットアップします。

f:id:halya_11:20190201005743g:plain

これにAvatarMaskを適用するには、レイヤーを追加して新しいレイヤーにAvatarMaskを追加します。

f:id:halya_11:20190201005801p:plain:w400

そしてこのレイヤーのWeightを1にすればマスクした部分だけがこのレイヤーのモーションになります。
今回は試しに腕だけ1つ目のレイヤーを適用するように設定してみました。

f:id:halya_11:20190201010119g:plain

手だけが走るようになりました。