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