この記事でのバージョン
Unity 5.3.4f1 Personal
はじめに
今回はUnityの便利システムの一つ、Blend Treeを使って
簡単にモーションをブレンドしてみる感じの記事です。
イメージとしては以下のような感じ。
なお、体が回転しているように見えますが、アニメーションが合成されているだけで、
Unityちゃんのrotationをコードから変えるということはしていません。
Blend Treeとは
そもそもBlend Treeとはなんぞやという話ですが。
複数のアニメーションを、それらすべての部分部分を異なる度合いで組み込むことによって、滑らかにブレンド(混合)できるようにするものです。
という感じのものです。
例えば前に歩くモーションと右に歩くモーションがあった際に、
それぞれを50%づつブレンドすることで、右前方にあるくモーションを表現する。
みたいな感じに使えます。
参考に以下が左から、
右、前方+右のブレンド、前方
のモーションを再生したものです。
ブレンドしたやつがうまいこと右前方に体を向けているのがわかると思います。
Blend Treeの設定方法
ではでは、Blend Treeの設定方法です。
まずAnimator Controllerを作成、ここではAnimatorControllerとリネームしています。
作成したAnimator Controllerを選択した状態で、AnimatorWindow を開き、
AnimatorWindow上で右クリックした後、
Create State > From New Blend Tree を選択するとBlend Treeが作成できます。
なお、Entryから矢印が自動で設定されるます。
Blend Treeをクリックすると画面が変わり、Blend Treeの設定が行えるようになるので、
Inspector上から、BlendTypeを2D Simple Directionalにします。
なお、BlendTypeについては以下を参照のこと。
次にAnimatorWindowのParametaタブでXとZのパラメータ(Float)を作成します。
さらにモーションをInspectorのAdd Motion Fieldで設定、
今回は待機と前後左右歩行の計5つを以下のように設定します。
ついでにPrametersにXとZを設定します。
ここで設定したXとZによってモーションがブレンドされるようになります。
例えばXとZが共に0.5の場合、
Xが1のWALK00_Rが50%、Zが1のWALK00_Fが50%ずつで再生される。
といった具合です。
とりあえず設定は完了です。
これをUnityちゃんに設定すると待機モーションだけが再生される状態です。
Blend Treeを操作
設定が完了したのでBlend Treeをスクリプトから操作してみます。
操作といっても、さきほどAnimatorWindowのParametaで設定したXとZの数値を変更するだけ。
変更方法も以下のようにAnimatorのSetFloatを使うだけ!簡単!
GetComponent<Animator> ().SetFloat ("X", 1);
あとは移動する方向に合わせてXとZを-1~1の範囲で設定してやれば、
いい感じのアニメーションが再生されるはずです。
問題は移動する方向ですが、今回は以前作成したジョイスティックを使います。
使い方や設定方法は以下の記事を参照の事、簡単に使えるはずです。
そのジョイスティックを使ってユニティちゃんを移動させつつ、
BlendTreeも操作するコードが以下の通り
using UnityEngine; using System.Collections; public class UnityChan : MonoBehaviour { //先ほど作成したJoystick [SerializeField] private Joystick _joystick = null; //移動速度 private const float SPEED = 0.1f; private void Update () { Vector3 pos = transform.position; pos.x += _joystick.Position.x * SPEED; pos.z += _joystick.Position.y * SPEED; transform.position = pos; GetComponent<Animator> ().SetFloat ("X", _joystick.Position.x); GetComponent<Animator> ().SetFloat ("Z", _joystick.Position.y); } }
これをユニティちゃんにAddし、ジョイスティックも設定、
ついでにカメラをユニティちゃんの子に設定します。
すると……
移動する方向に合わせていい感じにアニメーションがブレンドされるように!
おわりに
今回紹介したBrend Tree、便利な上に結構前からあるはずなんですが、
なぜかいままで知りませんでした……。
なお、Blend Treeは2Dでも使えます。
ブレンドこそされませんが、かなり簡単にアニメーションを切り替えられるので楽です(:3っ)∋〜