(Unity2022_3_23)Input Systemでボールを動かす

(設定)

・Package Managerより「Input System」をインストール

・「Yes」をクリック


・「Create Empty」オブジェクトを作成

・名前を「InputS」に変更

・「Add Component」を使って、「Player Input」コンポーネントを追加する。

・「Create Actions」をクリック

・名前を「InputS」にして、「Save」をクリック

・「Input Actions」のサブウインドウが開く(*後で使用)

・「InputS」を選択

「Generate C# Class」にチェックを入れて「Apply」をクリック

・「InputS」スクリプトが自動作成されたことを確認


(スクリプトの作成)

*ここでは「インプットシステムを使ってボールを前後左右に動かす」スクリプトを作成します。

<サンプルコード>

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Ball : MonoBehaviour
{
    public float speed;
    private Rigidbody rb;

    // ★インプットシステム
    private InputS inputS;

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

        // ★インプットシステム
        inputS = new InputS();
        inputS.Enable();
    }

    private void Update()
    {
        // ★インプットシステム
        // Inoput Actionsの設定と連動
        Vector2 movement2 = inputS.Player.Move.ReadValue<Vector2>();
        Vector3 movement3 = new Vector3(movement2.x, 0, movement2.y);

        rb.AddForce(movement3 * speed);
    }
}

(コードとInput Actionsの対応関係)

・「Player」→「Move」→「ReadValue」→「Vector2」はコードに対応

・上記のコードが8つのキー(「WASD」「↑↓→←」)と対応

 


(実行結果)

・スクリプトをBallオブジェクトに追加してゲーム再生

・「WASD」もしくは「↑↓→←」で、ボールが前後左右に動けば成功


(ジャンプ機能の追加)

<Input Actionsの設定追加>

・「InputS」を選択

・「Edit asset」をクリック

・「Actions」の「+」をクリック

・名前を「Jump」に変更

・Action Typeは「Button」を選択

<具体的なボタンの割当て>

・「No Binding」の選択

・「▼」のクリック

・「英数モード」で「space」とタイピング

・「Soace[Keyboard]」の候補が出てきたらそれを選択クリック

・これで「Jump」と「Spaceキー」が対応します。

・「キーの設定」が完了したらサブウインドを閉じる

・「Save」をクリック


(ジャンプのコード追加)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Ball : MonoBehaviour
{
    public float speed;
    private Rigidbody rb;

    // ★インプットシステム
    private InputS inputS;

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

        // ★インプットシステム
        inputS = new InputS();
        inputS.Enable();
    }

    private void Update()
    {
        // ★インプットシステム
        // Inoput Actionsの設定と連動
        Vector2 movement2 = inputS.Player.Move.ReadValue<Vector2>();
        Vector3 movement3 = new Vector3(movement2.x, 0, movement2.y);

        rb.AddForce(movement3 * speed);

        // ★追加(ジャンプ)
        if(inputS.Player.Jump.triggered)
        {
            rb.velocity = Vector3.up * 5;
        }
    }
}

(実行結果)

・スペースキーを押すとジャンプすれば成功