UnityのMecanimでヒューマノイドアニメーションさせる

(2017-06-20)

Space Robot Kyleを動かす。

アバターの作成

AssetsのModel/Robot Kyleを選択し、RigのAnimation TypeをHumanoidにすると、 自動的にボーン構造を解析して人型にマッピングしたアバターが設定される。 Configure Avatarで確認すると正しく設定されているようだ。

アバター

モーションの設定

KyleのAnimatorのAnimationに設定するAnimation Controllerを作成する。 まずは2つCreate Stateし、それぞれMotionに適当なモーション(今回はFighter Pack Bundle FREEを使った)を設定し、 Make Transitionで相互に結ぶと、オレンジになっているデフォルトステートから交互にモーションする。 ステートにはStateMachineBehaviourのScriptを設定することもできる。

モーション

次にParametersでモーションを変化させる。

分岐したモーション

Animatorの左上、parametersタブからBoolのWalkを追加する。 そして片方のTransitionのConditionにWalkがfalse、もう片方にはWalkがtrueを追加すると、 状態によって違うモーションをするようになる。 ちなみに、AnyStateからConditionを設定したTransitionを設定すると、どこのStateからでもそれで遷移させることができる。

パラメータ

このParameterはこんな感じに値を設定できる。

void Update () {
	GetComponent<Animator> ().SetBool ("Walk", Random.value < 0.5);
}

一部だけモーションさせる

人体の一部だけをモーションさせるにはAvatar Maskを使う。

Avatar Mask

Avatar Maskしたモーション

Animationで複数のレイヤーを作成すれば、異なるMaskでそれぞれステートを持たせることができる。

Animation Override Controller

作ったAnimationを違うモーションで再利用することができる。

Animator Override Controller