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

2024年11月15日

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


OnMoveイベントを使ったInput Systemの実装(SendMessageでの登録)

1. Input Systemの設定

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

2. Input Actionsアセットの設定

  • Unity6ではすでに設定済みです
  • それ以前の場合は、上記リンクのステップに従ってインストールしてください。

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

キャラクターのゲームオブジェクト(今回はCube)にPlayerInputコンポーネントをアタッチ(Add Componeボタンから)します。

Input Actionsに最初から作成されているInput Actionsアセット(InputSystem_Actions)を割り当てます。

4. PlayerControllerスクリプトの作成

新しいC#スクリプトを作成し、OnMoveイベントを実装します。

PlayerControllerスクリプトのOnMoveメソッドはMoveアクションがトリガーされるたびに呼び出されます。

using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerController : MonoBehaviour
{
    private Vector2 moveInput;

    // `OnMove`イベントメソッド(InputSystemのBehaviorがSendMessagesの場合)
    public void OnMove(InputValue val)
    {
        moveInput = val.Get<Vector2>();// 入力の取得
        Debug.Log("Move Input: " + moveInput);
    }

    private void Update()
    {
        // キャラクターの動きをここで制御します
        float moveX = moveInput.x;
        float moveZ = moveInput.y; 平面移動のため

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

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

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

6. 動作確認

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


OnMoveイベントを使ったInput Systemの実装(UnityEventでの登録)

1. Input Systemの設定

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

2. Input Actionsアセットの設定

  • Unity6ではすでに設定済みです
  • それ以前の場合は、上記リンクのステップに従ってインストールしてください。

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

キャラクターのゲームオブジェク

Input Actionsに最初から作成されているInput Actionsアセット(InputSystem_Actions)を割り当てます。

4. PlayerControllerスクリプトの作成

新しいC#スクリプトを作成し、OnMoveイベントを実装します。

using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerController : MonoBehaviour
{
    private Vector2 moveInput;

    // `OnMove`イベントメソッド(InputSystemのBehaviorがInvoke Unity Eventsの場合)
    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; // 平面移動のため

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

}

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

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

6. イベントの設定

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

7. 動作確認

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


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

C#,Unity

Posted by hidepon