【Unity】Input Systemを使用して、プレイヤーを動かす方法

Unity

スポンサーリンク

unityの新しい入力システムパッケージのInput Systemを使って、プレイヤーを動かす方法です。

完成動作

上下左右キーでプレイヤー(Sphere)が移動する。

作り方

1.シーンに各オブジェクトを配置

1-1.以下のようにPlaneを床にして、Sphere(赤い球)をプレイヤーとして配置する。

2.プレイヤーにRigidbodyを追加

2-1.プレイヤー(Sphere)にRigidbodyを追加する。(プレイヤーを動かす処理はRigidbodyのAddForceを使用して行うため)

3.Input Systemパッケージのインストール

3-1.Package Managerを開く

3-2.右上の検索窓で"Input System"で検索

3-3.上記画像の右下のInstallを押下してインストール
※インストール後に以下のようなメッセージが表示された場合、旧型式のInput Managerを無効化して新しいInput Systemを有効かするかどうかという意味なので、今回は旧式を使用しないので、Yesを押下。

3-4.Saveするとunityが再起動されるので待つ。

3-5.Input Systemのインストールが完了

4.プレイヤーにPlayer Inputコンポーネントを追加して設定

4-1.プレイヤー(Sphere)にPlayer Inputコンポーネントを追加

4-2.Player InputコンポーネントCreate Actionsを押下

4-3.任意の場所にInputActionsという名前で保存(今回はAssetsフォルダにInputというフォルダを作成してそこに保存)

4-4.以下のような画面が表示される場合があるが、こちらはいったん閉じる。

4-5.以下のように自動的にActionsプロパティに先ほど作成したInputActionsがアタッチされているはず。(されていなかったら自分でアタッチ)

5.Input Systemでプレイヤーを動かすスクリプトを作成

5-1.PlayerController.csという名前のスクリプトを作成して、以下のコードを記載する。

using UnityEngine;
using UnityEngine.InputSystem;

[RequireComponent(typeof(Rigidbody))]
public class PlayerController : MonoBehaviour
{
    [SerializeField]
    [Tooltip("プレイヤーの速度調整")]
    private float speed = 0;

    private Rigidbody rb;

    private float movementX;
    private float movementY;

    // Start is called before the first frame update
    void Start()
    {
        // プレイヤーにアタッチされているRigidbodyを取得
        rb = gameObject.GetComponent<Rigidbody>();
    }

    /// <summary>
    /// 移動操作(上下左右キーなど)を取得
    /// </summary>
    /// <param name="movementValue"></param>
    private void OnMove(InputValue movementValue)
    {
        // Moveアクションの入力値を取得
        Vector2 movementVector = movementValue.Get<Vector2>();

        // x,y軸方向の入力値を変数に代入
        movementX = movementVector.x;
        movementY = movementVector.y;
    }

    private void FixedUpdate()
    {
        // 入力値を元に3軸ベクトルを作成
        Vector3 movement = new Vector3(movementX, 0.0f, movementY);

        // rigidbodyのAddForceを使用してプレイヤーを動かす。
        rb.AddForce(movement * speed);
    }

}

※補足

Moveアクションというのは4-2で作成したInputActionsの中のActionsの中の"Move"の操作のこと。
詳しくはInput Systemについてネットで調べてください。

6.プレイヤーにPlayerControllerスクリプトをアタッチ

6-1.プレイヤーにPlayerControllスクリプトをアタッチ

6-2."Speed"プロパティを任意の値に設定し、プレイヤーの移動速度を調整(今回は10)

完成

これで上下左右キーを押すとプレイヤーが移動する。

Unity

Posted by ton