しっぽを追いかけて

ぐるぐるしながら考えています

Unity と猫の話題が中心   掲載内容は個人の私見であり、所属組織の見解ではありません

Unity でカーソルキーでキャラを上下左右に動かす

※ これは 2020/12/25 時点の Unity 2020.2.1f1 の情報です

最新版では動作が異なる可能性がありますのでご注意ください

前回カーソルキーでねこキャラを左右に振り向くようにしたので、今度は上下左右の4方向に動かしてみたい

用意したのは下記のような4方向×2パターンずつのねこキャラ画像

4方向のねこキャラ画像

まずはアニメーションに利用していた Animator を選択し編集ウィンドウを開く

Parameters タブを選択後、「+」ボタンから「Float」の値を2個追加し、それおぞれ xy という名前にする

Parameter を追加

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

Blend Tree の追加

「Blend Tree」が作成されたらダブルクリックして内部編集モードに遷移

さらに「Blend Tree」を選択し、Inspector タブの Blend Type2D Simple Directional を選択

2D Simple Directional に

Parametersxy になるよう変更

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

4方向のアニメーション設定

最後に 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 のアニメーションで複数方向のアニメーション合成が正しくできないので、Animatorxy の値を設定する場合は、斜め方向などでアニメーション同士がブレンドされないよう排他制御をする

さてお試し

上下左右にねこキャラ移動

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