しっぽを追いかけて

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

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

Unity でカーソルキー押下中に4方向移動させる

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

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

前回カーソルキーで下記のようなねこキャラを上下左右の4方向に動かした・・・が、押しっぱなしで移動せず、押した瞬間しか移動しない!

これだと不便なので押しっぱなしで移動するようにしてみる

4方向のねこキャラ画像

といってもやることはスクリプト Cat.cs の修正のみ

using UnityEngine;
using UnityEngine.InputSystem;

public class Cat : MonoBehaviour
{
    private Animator animator = null;
    private Vector2 move = Vector2.zero;

    public void Awake()
    {
        this.animator = this.GetComponent<Animator>();
    }

    public void Update()
    {
        if (this.move != Vector2.zero)
        {
            this.transform.Translate(this.move * Time.deltaTime * 3f);
        }
    }

    public void OnMove(InputAction.CallbackContext context)
    {
        // キー入力が離れた場合も更新される
        this.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);
        }
    }
}

OnMove はキーを離した場合にも移動量ゼロとして呼び出されるので、これを利用して最後の移動方向を記録しておき、Update() の毎フレーム処理で実際のキャラ移動をするようにした

移動量は1フレームの経過時間に合わせて決まるよう、Time.deltaTime を利用

さっそくお試し

押しっぱなし移動

前回はちょんちょん移動だったけど今回は押しっぱなしなのでスーッと滑らかに移動するようになった