今回は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」を使うのが自然なのかなと思っていたりします。