※ これは 2020/12/25 時点の Unity 2020.2.1f1 の情報です
最新版では動作が異なる可能性がありますのでご注意ください
前回カーソルキーでねこキャラを左右に振り向くようにしたので、今度は上下左右の4方向に動かしてみたい
用意したのは下記のような4方向×2パターンずつのねこキャラ画像

まずはアニメーションに利用していた Animator を選択し編集ウィンドウを開く
Parameters タブを選択後、「+」ボタンから「Float」の値を2個追加し、それおぞれ x と y という名前にする

次に Base Layer にあるもともとの State を削除して、右クリックメニューから「Create State」-「From New Blend Tree」を選ぶ

「Blend Tree」が作成されたらダブルクリックして内部編集モードに遷移
さらに「Blend Tree」を選択し、Inspector タブの Blend Type の 2D Simple Directional を選択

Parameters は x と y になるよう変更
右下の「+」ボタンで行を4つまで増やしたら、Motion に各方向のアニメーションクリップを作って設定、PosX と PosY の値を下記のように指定する

最後に Cat.cs を変更
using UnityEngine; using UnityEngine.InputSystem; public class Cat : MonoBehaviour { private Animator animator = null; public void Awake() { this.animator = this.GetComponent<Animator>(); } public void OnMove(InputAction.CallbackContext context) { var move = context.ReadValue<Vector2>(); var normalized = new Vector3(Mathf.Round(move.normalized.x), Mathf.Round(move.normalized.y), 0); // アニメーションが上下左右に排他になるよう制御 if (normalized.x != 0) { this.animator.SetFloat("x", normalized.x); this.animator.SetFloat("y", 0); } else if (normalized.y != 0) { this.animator.SetFloat("x", 0); this.animator.SetFloat("y", normalized.y); } this.transform.Translate(move * 0.25f); } }
今回は 2D のアニメーションで複数方向のアニメーション合成が正しくできないので、Animator に x と y の値を設定する場合は、斜め方向などでアニメーション同士がブレンドされないよう排他制御をする
さてお試し

向く方向に応じて Animator の Blend Tree が遷移するようになっている!