Unity でカーソルキーでキャラを上下左右に動かす
※ これは 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
が遷移するようになっている!