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

Unityの新しいInput Systemは、従来のInputクラスよりも強力で柔軟な入力処理を提供します。キーボードだけでなく、コントローラーやタッチパネルなど複数のデバイスからの入力を統合的に管理できます。本資料では、Unityの新しいInput Systemを使用して、キーボード入力を処理する方法を中心に解説します。

新しいInput Systemの特徴

新しいInput Systemは、以下の特徴を持ちます。

  • 柔軟な入力マッピング: キーボードやコントローラーなど、さまざまなデバイスの入力を簡単に設定できます。
  • アクションベースの入力管理: 入力を「アクション」として抽象化し、各アクションに複数のキーやボタンを割り当てて処理が可能です。
  • 複数デバイス対応: キーボード、ゲームパッド、タッチ入力、マウスなど、複数の入力デバイスに対応。
  • コールバックによる入力処理: 入力が発生した瞬間にコールバックをトリガーするイベントベースの処理が可能です。

セットアップ

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

  1. Unityのメニューから Window → Package Manager を開きます。
  2. Input System パッケージを検索してインストールします。
  3. インストール後に再起動が求められます。また、古いInputクラスとの互換性の設定を行うかどうかも選択できます。

2. Input Action Assetの作成

  1. プロジェクトビューで右クリックし、Create → Input Actions を選択します。これでInput Action Assetが作成されます。
  2. Input Action Assetをダブルクリックして、キーボードやコントローラーの入力をマッピングします。例えば、MoveJumpといったアクションを定義し、それぞれにキーを割り当てます。

コードでの実装

1. アクションベースのキーボード入力処理

以下は、Input Systemを使ってWASDキーで移動入力を処理するサンプルコードです。

using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerController : MonoBehaviour
{
    public InputAction moveAction;

    private void OnEnable()
    {
        moveAction.Enable();  // アクションを有効化
    }

    private void OnDisable()
    {
        moveAction.Disable();  // アクションを無効化
    }

    void Update()
    {
        Vector2 moveInput = moveAction.ReadValue<Vector2>();  // 入力の取得
        Debug.Log("Move Input: " + moveInput);
        // 移動処理
    }
}

2. コールバックベースの入力処理

コールバック(イベント)を使用して、入力が発生したときにのみ処理を行う方法です。この方法では、フレームごとのポーリングは必要ありません。

using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerController : MonoBehaviour
{
    public InputAction moveAction;

    private void OnEnable()
    {
        moveAction.performed += OnMove;  // コールバック登録
        moveAction.Enable();  // アクションを有効化
    }

    private void OnDisable()
    {
        moveAction.performed -= OnMove;  // コールバックの解除
        moveAction.Disable();  // アクションを無効化
    }

    private void OnMove(InputAction.CallbackContext context)
    {
        Vector2 moveInput = context.ReadValue<Vector2>();  // 入力の取得
        Debug.Log("Move Input: " + moveInput);
        // 入力に応じた処理をここで実行
    }
}

3. Updateモードの制御

新しいInput Systemでは、入力処理のタイミングを制御することができます。以下の3つのモードがあり、プロジェクトに応じた最適なものを選択できます。

  • Dynamic Update Mode: 毎フレーム(Update)で入力を取得します。リアルタイムな操作に適しています。
  • Fixed Update Mode: 物理演算と同じタイミングで入力を処理します。物理演算と同期する入力が必要な場合に使用します。
  • BothUpdateFixedUpdateの両方で入力を取得します。

この設定は、Player Inputコンポーネントのプロパティから変更できます。

新しいInput Systemの利点と旧Inputクラスとの比較

機能新しいInput System従来のInputクラス
デバイスのサポート複数のデバイス(キーボード、マウス、ゲームパッドなど)主にキーボード、マウス、ゲームパッド
入力方法アクションベースの柔軟な入力マッピングフレームごとのポーリング
コールバックのサポート入力イベントに基づくコールバック処理が可能基本的にはポーリング
複数デバイスの一括管理複数デバイスのマッピングや同時サポートが簡単手動でデバイスの切り替えが必要
設定とカスタマイズエディタで直感的に設定、複雑な操作も簡単に設定可能手動でスクリプトを書く必要が多い

まとめ

Unityの新しいInput Systemは、旧Inputクラスよりも強力かつ柔軟な入力処理が可能です。特に、複数のデバイスに対応した入力や、アクションベースの入力処理が必要なゲームでは、その真価を発揮します。本技術資料をもとに、Input Systemを活用して効率的な入力処理を実装してください。


この技術資料は、Unityの新しいInput Systemを理解し、実際のプロジェクトで活用できるように構成されています。必要に応じて追加の説明やサンプルコードを入れながらカスタマイズすることもできます。

Unity

Posted by hidepon