Unityにおける新しいInput Systemを使ったキーボード入力の技術資料
Unityの新しいInput Systemは、従来のInput
クラスよりも強力で柔軟な入力処理を提供します。キーボードだけでなく、コントローラーやタッチパネルなど複数のデバイスからの入力を統合的に管理できます。本資料では、Unityの新しいInput Systemを使用して、キーボード入力を処理する方法を中心に解説します。
新しいInput Systemの特徴
新しいInput Systemは、以下の特徴を持ちます。
- 柔軟な入力マッピング: キーボードやコントローラーなど、さまざまなデバイスの入力を簡単に設定できます。
- アクションベースの入力管理: 入力を「アクション」として抽象化し、各アクションに複数のキーやボタンを割り当てて処理が可能です。
- 複数デバイス対応: キーボード、ゲームパッド、タッチ入力、マウスなど、複数の入力デバイスに対応。
- コールバックによる入力処理: 入力が発生した瞬間にコールバックをトリガーするイベントベースの処理が可能です。
セットアップ
1. Input Systemパッケージのインストール
- Unityのメニューから
Window
→Package Manager
を開きます。 Input System
パッケージを検索してインストールします。- インストール後に再起動が求められます。また、古い
Input
クラスとの互換性の設定を行うかどうかも選択できます。
2. Input Action Assetの作成
- プロジェクトビューで右クリックし、
Create
→Input Actions
を選択します。これでInput Action Assetが作成されます。 - Input Action Assetをダブルクリックして、キーボードやコントローラーの入力をマッピングします。例えば、
Move
やJump
といったアクションを定義し、それぞれにキーを割り当てます。
コードでの実装
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: 物理演算と同じタイミングで入力を処理します。物理演算と同期する入力が必要な場合に使用します。
- Both:
Update
とFixedUpdate
の両方で入力を取得します。
この設定は、Player Input
コンポーネントのプロパティから変更できます。
新しいInput Systemの利点と旧Inputクラスとの比較
機能 | 新しいInput System | 従来のInputクラス |
---|---|---|
デバイスのサポート | 複数のデバイス(キーボード、マウス、ゲームパッドなど) | 主にキーボード、マウス、ゲームパッド |
入力方法 | アクションベースの柔軟な入力マッピング | フレームごとのポーリング |
コールバックのサポート | 入力イベントに基づくコールバック処理が可能 | 基本的にはポーリング |
複数デバイスの一括管理 | 複数デバイスのマッピングや同時サポートが簡単 | 手動でデバイスの切り替えが必要 |
設定とカスタマイズ | エディタで直感的に設定、複雑な操作も簡単に設定可能 | 手動でスクリプトを書く必要が多い |
まとめ
Unityの新しいInput Systemは、旧Inputクラスよりも強力かつ柔軟な入力処理が可能です。特に、複数のデバイスに対応した入力や、アクションベースの入力処理が必要なゲームでは、その真価を発揮します。本技術資料をもとに、Input Systemを活用して効率的な入力処理を実装してください。
この技術資料は、Unityの新しいInput Systemを理解し、実際のプロジェクトで活用できるように構成されています。必要に応じて追加の説明やサンプルコードを入れながらカスタマイズすることもできます。
ディスカッション
コメント一覧
まだ、コメントがありません