UnityのアニメーターコントローラのBlendTreeを使う

今回は今まで使わなかったアニメーターコントローラのBlendTree(ブレンドツリー)を使ってみます。

ブレンドツリーは例えば、主人公キャラクターが移動中に違う方角を向いた時、キャラの体の向きを少し傾けたアニメーションを再生したい時や
向いている方向によってアニメーションを変更する時に便利です。

つまり細かい動きを制御したい時にはBlendTreeを使うという事ですね。

スポンサーリンク

アニメーターコントローラの追加

まずは新しいアニメーターコントローラを作成し、キャラクターにAdd Componentします。

ブレンドツリー1


アニメーターコントローラはBlendTreeという名前にして、さらにCharacterControllerとMoveTestという新しいスクリプトを設定します。

BlendTreeの作成

ブレンドツリー2

Animatorウインドウでアニメーターコントローラ(BlendTree)を開き、右クリック→Create State→From New Blend Treeを選択します。
出来上がったら名前をRunに変更します。

ブレンドツリー3

右クリック→CreateState→Emptyで新しい状態を作り、名前をIdleに変更します。

IdleのアニメーションクリップにはStandardAssetのHumanoidIdleを設定しておきます。
Idle→Runの遷移条件はHasExitTimeのチェックを外し、条件にSpeedがGreaterで0.1、
Run→Idleの遷移条件はHasExitTimeのチェックを外し、条件にSpeedがLessで0.1の時に設定しておきます。

ブレンドツリー内でMoveXの値によってアニメーションは変更されますが、その大元のRunに遷移する条件はSpeedの値が0.1以上になった時に遷移します。

アニメーションパラメータにSpeed、MoveX、MoveYをFloat型で作成しておきます。
これらのパラメータ値によって、アニメーションの遷移を変更します。

ブレンドツリーの1Dを使い、条件とアニメーションクリップを設定する

次にRunのStateをダブルクリックしてください。そうするとブレンドツリーの中身が表示されます。

ブレンドツリー4

上の画像のように表示されるので、blend treeを選択し、

ブレンドツリー5

インスペクタで上のようになります。BlendTypeを1Dにし、ParameterをMoveXに変更します。
MoveXは左右に押されている度合いを渡すので左右のキーが押されたらアニメーションを変更します。
Motionの+の部分をクリックし、3つAdd Motion Fieldを追加します。

ブレンドツリー6

上のように-1となっているところをクリックし-1に設定します。(元々は0になっています)
これはキーの押し具合が-1~1の値で取得するのでそれと対応する為です。

MotionのアニメーションクリップにはStandardAssetのThirdPersonControllerの
HumanoidRunLeft
HumanodiRun
HumanoidRunRight
をそれぞれ設定します。

ブレンドツリー7

上のようになります。アニメーションクリップの右側の時計のパラメータはアニメーションの速度で、その右側はアニメーションをミラーにするかどうかのチェックボックスです。

MoveXの値が-1の時HumanoidRunLeft
MoveXの値が0の時HumanoidRun
MoveXの値が1の時HumanoidRunRight

のアニメーションが再生され、その中間の値であればアニメーションがブレンドされます。
上の画像で最後のクリップがHumanoidFallRightになっていますが、正しくはHumanoidRunRightです。

これでアニメーターコントローラの作成が終了しました。

スクリプトでアニメーションパラメータを変更する

あとはスクリプトからアニメーションパラメータの値を変更してアニメーションを制御するだけです。
ではさきほどキャラクターに設定したMoveTestを記述していきます。

MoveTestは簡単な移動の処理を書いています。入力値のmagnitudeが0.1より大きかった場合は移動させます。

アニメーターパラメータのSpeedにはそのまま入力値のmagnitudeを入れ、MoveX、MoveYにはX軸、Z軸のベクトル値を入れます。
x(左右)の方向にキーが押されていたらその値*45度分*Time.deltaTimeを現在の角度に足して、キャラクターの向きを変えます。

向きを変えたらその向いている方向に移動値を加えます。
入力値のベクトルが0.1よりしただった場合はアニメーションパラメータの値のそれぞれを0に設定します。

最後に重力値を足し、CharacterControllerのMoveで移動させます。

BlendTreeのBlendTypeを1Dにしたので、MoveYの値は使っていませんが、2D系のBlendTypeにした時に利用する可能性もあったので作成しました。
今回は使用していません・・・・(^_^;)

これでアニメーターコントローラのBlendTreeの機能を使う事が出来るようになりました。
Unityの実行ボタンを押して確認してみましょう。

ブレンドツリー8

左右のキーの押し具合によって体を少し斜めにして走るようになりました。
2Dのブレンドで二つのParameterを使用して、さらに細かく分けるようにも出来ます。