2Dプレイヤーを上下左右に動かす(Unity6-InputSystem)|Unityゲーム制作

今回はUnity6でInputSystemを利用して「キーボード入力」でキャラクターを動かすのを簡単に実装していきます。上下左右に動かすトップダウン式を想定しています。

はじめに

使用するのは「Unity 6」のバージョン「6000.0.40f1」、テンプレートは「Universal 2D」です。

InputSystemを利用してキーボード入力でキャラクターを動かしていきます。

実装開始

Hierarchyの「+」から「2DObject」→「Sprites」→「Circle」を追加します。

名前をPlayerに変更して、「AddComponent」から「PlayerInput」を追加します。初期で用意されている「InputSystem_Actions」をActionsにセットします。

更に「AddComponent」から「Rigidbody2D」を追加して「GravityScale」を0に、新規スクリプトで「PlayerMove」を追加します。

UnityEventsで実装

「PlayerInput」の「Behavior」を「InvokeUnityEvents」に変更します。

スクリプトは下記に変更します。

using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerMove : MonoBehaviour
{
    [SerializeField] private float movespeed;

    private Rigidbody2D rb;
    private Vector2 moveInput;

    private void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    void FixedUpdate()
    {
        Vector2 pos = moveInput.normalized * movespeed * Time.fixedDeltaTime;
        rb.MovePosition(rb.position + pos);
    }

    public void OnMove(InputAction.CallbackContext context)
    {
        moveInput = context.ReadValue<Vector2>();
    }
}

PlayerInputの「Events」→「Player」の「Move」に作成した「OnMove」をセットします。パラメータのMoveSpeedは好きな値を入力します。

実行して、キーボード入力で下記のように動けばOK。

SendMessagesで実装

「PlayerInput」の「Behavior」を「SendMessages」にしても同じように実装することが出来ます。

スクリプトを下記に変更します。

using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerMove : MonoBehaviour
{
    [SerializeField] private float movespeed;

    private Rigidbody2D rb;
    private Vector2 moveInput;

    private void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }
    void FixedUpdate()
    {
        Vector2 pos = moveInput.normalized * movespeed * Time.fixedDeltaTime;
        rb.MovePosition(rb.position + pos);
    }

    public void OnMove(InputValue value)
    {
        moveInput = value.Get<Vector2>();
    }
}

公式リファレンスは下記。

これまでは「Input.GetAxisRaw」でプレイヤーの動きを実装することが多かったけど、Unity6ではテンプレートの時点で「InputSystem」が組み込まれているのでUnity6では「InputSystem」を使うのが自然なのかなと思っていたりします。

タイトルとURLをコピーしました