Unity6における新しいInput Systemを使ったキーボード入力の技術資料

2024年11月14日

OnMoveイベントを使用することで、より簡単にキャラクターの動きを処理できます。以下に、OnMoveイベントを使った方法を説明します。


OnMoveイベントを使ったInput Systemの実装

1. Input Systemの設定

  • Unity6ではすでにインストール済みです
  • まだの場合は、リンクのステップに従ってインストールしてください。

2. Input Actionsアセットの設定

  1. Unity6ではすでに設定済みです
  2. まだの場合は、上記リンクのステップに従ってインストールしてください。

3. Player Inputコンポーネントの追加

  • キャラクターのゲームオブジェクト(今回はCube)にPlayerInputコンポーネントをアタッチ(Add Componeボタンから)します。
  • Input Actionsに最初から作成されているInput Actionsアセット(InputSystem_Actions)を割り当てます。

3. PlayerControllerスクリプトの作成

  • 新しいC#スクリプトを作成し、OnMoveイベントを実装します。
using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerController : MonoBehaviour
{
    private Vector2 moveInput;

    // `OnMove`イベントメソッド
    public void OnMove(InputAction.CallbackContext context)
    {
        moveInput = context.ReadValue<Vector2>();  // 入力の取得
        Debug.Log("Move Input: " + moveInput);
    }

    private void Update()
    {
        // キャラクターの動きをここで制御します
        float moveX = moveInput.x;
        float moveZ = moveInput.y;  // moveY を moveZ に変更

        transform.Translate(new Vector3(moveX, 0, moveZ) * Time.deltaTime);
    }

}

4. PlayerInputコンポーネントの設定

  1. キャラクターのゲームオブジェクト(今回はCube)に作成したPlayerContollerコンポーネントをアタッチします
  2. Player Inputコンポーネントの設定で、Behaviorを「Invoke Unity Events」に変更します。

5. イベントの設定

  1. Player Inputコンポーネントの設定で、Events > PlayerのMove(CallBackContext)を開きます
  2. Moveイベントに作成したPlayerControllerのOnMoveメソッド(イベント)を割り当てます
  • Moveイベントに作成したPlayerControllerのOnMoveメソッド(イベント)を割り当てます
  • PlayerControllerスクリプトのOnMoveメソッドはMoveアクションがトリガーされるたびに呼び出されます。

6. 動作確認

  • Unityエディターでプレイして、WASDキーやゲームパッドでキャラクターが移動するかを確認します。

OnMoveイベントを使用することで、入力イベントを簡潔に処理でき、コードが整理されます。必要に応じて、他のイベント(OnJumpなど)も同様の方法で設定できます。

この PlayerController スクリプトは、Unity の新しい Input System パッケージを使用して、プレイヤーキャラクターの移動を制御するものです。以下にコードの詳細な説明をします。


コードの構造と説明

  1. ライブラリのインポート
   using UnityEngine;
   using UnityEngine.InputSystem;
  • using UnityEngine: Unity の基本的な API を使用するためのライブラリです。ゲームオブジェクトの管理や、物理演算、描画などが含まれています。
  • using UnityEngine.InputSystem: 新しい Input System パッケージを使用するためのライブラリです。このパッケージは複雑な入力処理を可能にし、キーボード、マウス、コントローラー、タッチなどに対応します。
  1. PlayerController クラス
   public class PlayerController : MonoBehaviour
  • PlayerControllerMonoBehaviour を継承しており、Unity のコンポーネントとして使用できます。このスクリプトは、プレイヤーキャラクターにアタッチして動作させます。
  1. 変数の宣言
   private Vector2 moveInput;
  • moveInput: Vector2 型の変数です。プレイヤーの移動入力(左右と前後)を格納します。Vector2 は2次元ベクトルで、X と Y の成分を持ちます。
  1. OnMove イベントメソッド
   public void OnMove(InputAction.CallbackContext context)
   {
       moveInput = context.ReadValue<Vector2>();  // 入力の取得
       Debug.Log("Move Input: " + moveInput);
   }
  • OnMove メソッドは、Input System の入力イベントに対応して呼び出されます。例えば、WASDキーやゲームパッドのアナログスティックの入力を処理します。
  • context.ReadValue<Vector2>(): Vector2 型の入力値を取得します。例えば、Wキーを押すと moveInput.y が正の値になり、Dキーを押すと moveInput.x が正の値になります。
  • Debug.Log: 入力値をコンソールに出力して、デバッグ用の情報を表示します。
  1. Update メソッド
   private void Update()
   {
       // キャラクターの動きをここで制御します
       float moveX = moveInput.x;
       float moveZ = moveInput.y;  // moveY を moveZ に変更

       transform.Translate(new Vector3(moveX, 0, moveZ) * Time.deltaTime);
   }
  • Update メソッドは毎フレーム呼び出されます。ここで、キャラクターの移動を制御します。
  • moveX: moveInput.x の値を取得し、X軸方向の移動量を決定します(左右の動き)。
  • moveZ: moveInput.y の値を取得し、Z軸方向の移動量を決定します(前後の動き)。このように moveZ に変更することで、Unity の3D空間で X軸と Z軸の移動を正しく反映しています。
  • transform.Translate: キャラクターを指定された方向に移動させるメソッドです。Vector3 型で移動量を指定し、Time.deltaTime を掛けてフレームレートに依存しない動きを実現しています。

まとめ

  • Input System: Input System パッケージを使用して、プレイヤーの入力(WASDキーやゲームパッドの入力など)をキャッチし、OnMove メソッドでその入力を取得しています。
  • 移動処理: Update メソッドで取得した入力を使ってキャラクターを移動させます。X軸(左右)と Z軸(前後)に沿って移動し、Time.deltaTime を掛けることでフレームレートによる影響を防いでいます。
  • デバッグ: Debug.Log で入力値を確認できるようにしています。これにより、入力のデバッグが簡単になります。

C#,Unity

Posted by hidepon