UnityでWASDキーを使って移動させる方法|Input Systemで操作を実装

unity

はじめに

今回は、UnityのInput Systemを使って、キーボードのWASDキーでプレイヤーを前後左右に移動させる方法を紹介します。

Input Systemの細かい仕組みについては深掘りせず、実際に設定した内容を中心にまとめていきます。


Input Actionsを作成する

まず、WASDキーから入力を受け取るためにInput Actionsを設定します。

Projectウィンドウで右クリックし、

Create → Input Actions

からInput Actionsアセットを作成しました。

今回は「PlayerInput」という名前で作成しています。

作成したInput Actionsをダブルクリックして開きます。

開いた画面で、「+」をクリックしてAction Mapを新規作成します。

作成したAction Mapの名前を、

Player

とします。

Action Mapを新規作成すると、Actionも自動的に追加されます。

追加されたActionの名前を、

Move

に変更します。

Action TypeはValue、Control TypeはVector 2に設定しました。


WASDキーを設定する

次に、MoveにWASDキーを割り当てます。

Moveの右側にある**「+」**をクリックし、

Add Up\Down\Left\Right Composite

を追加します。

これによって、上下左右の入力を1つのVector2としてまとめて扱うことができます。

それぞれ以下のように設定します。

入力キー
UpW
DownS
LeftA
RightD

それぞれのPathをクリックして、対応するキーを追加します。

これで、WASDキーの入力を移動方向として取得できるようになります。


移動用のスクリプトを作成

次に、取得した入力を使ってプレイヤーを移動させます。

今回は以下のようなスクリプトを作成しました。

using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerController : MonoBehaviour
{
    public float moveSpeed = 5f;

    private Vector2 moveInput;

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

    void Update()
    {
        Vector3 movement = new Vector3(moveInput.x, 0, moveInput.y);

        transform.Translate(
            movement * moveSpeed * Time.deltaTime
        );
    }
}

OnMove()でWASDの入力を受け取り、その入力を使ってプレイヤーを移動させています。

moveSpeedの数値を変更することで、移動速度も調整できます。


プレイヤーに設定する

まず、Hierarchyで右クリックし、

Create Empty

から空のGameObjectを作成します。

作成したGameObjectをプレイヤーとして使用します。

次に、作成したPlayerControllerスクリプトを、HierarchyにあるプレイヤーのGameObjectへドラッグ&ドロップして追加します。

さらに、プレイヤーのGameObjectにPlayer Inputコンポーネントを追加します。

Player InputのActionsには、作成したInput Actionsを設定します。

必要に応じて、プレイヤーの子オブジェクトとしてカメラなどを配置します。

これで、プレイヤーを操作するための基本的な設定が完了しました。


実際に動かしてみる

ゲームを実行してWASDキーを押してみます。

Wキーを押すと前方向、Sキーで後ろ方向、Aキーで左方向、Dキーで右方向へプレイヤーが移動します。

4つのキーを組み合わせることで、斜め方向への移動もできます。

実際に動かしてみると、キーボードだけでも簡単にプレイヤーを操作できるようになりました。


デフォルトのInput Actionsを利用する

今回のようにWASDでプレイヤーを移動させる場合、Input Actionsを一から作成する必要はありません。

Unityでは、Input System用のInput Actionsがあらかじめ用意されています。

デフォルトのInput Actionsには、プレイヤー操作に使用できるMoveLookJumpなどのActionが用意されています。

そのため、すでに用意されているActionを利用すれば、Input Actionsを新しく作成する手間を省いて、より手早くプレイヤー操作を実装できます。

今回のような基本的な操作であれば、まずはデフォルトのInput Actionsを確認して、利用できるActionがないか確認してみるとよいでしょう。

また、今後ゲームに新しい操作を追加する場合は、既存のActionを利用したり、新しいActionを追加したりしながら拡張できます。


まとめ

今回は、UnityのInput Systemを使ってWASDキーによるプレイヤーの移動を実装してみました。

Input ActionsでWASDの入力を設定し、スクリプトで取得した入力をプレイヤーの移動に利用しています。

今回作った移動処理をベースに、今後はマウスを使ったカメラ操作やジャンプなども追加していく予定です。

Unityで3Dゲームを制作する場合、まずはこうした基本的な移動処理から作っていくと、少しずつゲームらしい操作にしていくことができます。