Unity の入力システムには、Input Manager と Input System がある。もともと Input Manager というシステムが搭載されていたが、Unity 6 から Input System が既定の入力システムになった。
| 比較項目 | Input Manager | Input System |
|---|---|---|
| インストール方法 | インストール済み | Package Manager からインストールする |
| ジョイスティック対応 | 単純なものなら最初から設定されている | InputAction を使えば、基本的なものは最初から設定されている |
| コードの簡潔さ | 単純なものなら簡単 | 構成によっては複雑(仕組みの理解が必要になる) |
| 長押し・連打判定 | 自分で作らなければならない | 設定で検出できる |
| 学習コスト | 低い | 高い |
| 将来性 | deprecated | 標準 |
| 実行中の再割り当て | 自分で作らなければならない | 対応している |
| UI 操作との連携 | 自分で作らなければならない | 個別に設定して切り替え可能 |
どちらの入力を使うかは、Project Settings の以下の場所から設定できる。両方を同時に有効にすることも可能。

サンプルのダウンロード
Input Manager
Unity プロジェクトにサンプルをダウンロード・インポートして、Assets/Input/Input Manager Sample/Input Manager Sasmple.unity シーンを開くと、Input Manager を使った入力のサンプルを実行できる。
Input Manager による入力の検出は、基本的に Update() 内で行う。Input.Get* メソッドを使って Bool 型の戻り値を取得し、入力を検出する。
ここで使っている Input.GetAxis(), Input.GetAxisRaw(), Input.GetButton(), Input.GetButtonUp(), Input.GetButtonDown() の引数として渡されている文字列は、以下のように Input Manager に設定されている。この設定は変えることもできるし、新たな Axis を追加することもできる。

Input System (1)
続いて、Assets/Input/Input System Sample 1/Input System Sample 1.unity シーンを開いて実行すると、Input System を使った入力のサンプルを実行できる。
このサンプルでは、Input Manager と同様に Update() で入力を検出している。Unity の教科書(6以降)では、このやり方を使っている。
ただし、このやり方では、Input Manager から乗り換えるメリットがあまりない。特に、ゲームパッド対応(複数の入力デバイスに対応する)場合にコーディングが大幅に増えてしまう。
Input System (2)
引き続き、Assets/Input/Input System Sample 2/Input System Sample 2.unity シーンを開いて実行すると、Input System を活用したサンプルを実行できる。
ここでは、Input System Sample 2.inputactions アセットにデバイスと操作の関連性を登録し、それを関数呼び出しに関連付けている。この関連付けをバインドという。
関連付けは System オブジェクトに追加された Player Input コンポーネントにより行われている。

やってみよう
Input System を理解するために、以下をやってみましょう。
(1) 何もない状態から Input System の設定をしてみる
Input System Sample 2 (Blank).unity シーンを開く。このシーンはまだ Input System の設定が行われていない。これを入力に応じて動かすように設定してみましょう。
以下の作業をします。
- System オブジェクトに Player Input コンポーネントを追加する
- Player Input コンポーネントの Actions プロパティにデフォルトで設定される設定をクリアする
- Create Actions ボタンをクリックし、デフォルトの設定のまま Actions に割り当てる
- Player Input コンポーネントの Behavior プロパティを Invoke Unity Events に変更する
- ここで本来は Events の下に、以下の画像のように Player, UI の設定が出てこなければならないが、出てこない場合がある。その場合は、いったん別のシーンを開いて戻ってくる、Actions をいったんクリアして割り当て直す、などすれば出てくる(はず)。
- Player の設定を展開し、各イベントに Input System Sample 2 コンポーネントのメソッドを割り当てる

(2) ボタンの長押しを検出してみる
サンプルでは、Fire ボタンの長押し (Hold) を検出できます。以下のように設定して、長押しを検出してみましょう。

参考資料
- Input System マニュアル(最新)
ページの言語は右上の Language オプションで切り替えられる。ただし、最新バージョンでは日本語版がない場合もあることに注意すること。