アーキテクチャ
Input System は、低レベル層と高レベル層から成る階層化アーキテクチャになっています。
ネイティブバックエンド
Input System の基盤となるのは、ネイティブのバックエンドコードです。これは、使用可能な Device に関する情報と、Device からの入力データを収集するプラットフォーム固有のコードです。このコードは Input System パッケージの一部ではなく、Unity 自体に含まれています。Unity でサポートされるランタイムのプラットフォームごとに固有の実装があります。このため、入力に関するプラットフォーム固有のバグが生じた場合は、新しいバージョンの Input System パッケージでは修正できず、Unity の更新が必要になることがあります。
Input System は、ネイティブバックエンドから送信される イベント を使用して、ネイティブバックエンドとのインターフェースを確立します。これらのイベントは、Input Device の作成と削除、および Device の状態の更新をシステムに通知します。効率を高め、ガベージの生成を回避するために、ネイティブバックエンドでは、これらのイベントが、イベントのストリームを含む Raw アンマネージメモリのシンプルなバッファとして報告されます。
Input System では、Device に送信された コマンド の形でデータを返送することもできます。これらの Device も、ネイティブバックエンドが解釈するメモリのバッファです。これらのコマンドの意味は、Device タイプやプラットフォームによって異なる可能性があります。
Input System (低レベル)
低レベルの Input System のコードでは、ネイティブバックエンドから提供されたイベントストリームのメモリを処理して解釈し、個々のイベントを送出します。
Input System では、イベントストリーム内で新しく検出されたそれぞれの Device に対して Device 表現が作成されます。低レベルコードでは、Device が、未加工のアンマネージメモリのブロックとして認識されます。低レベルコードが、Device の状態イベントを受け取った場合は、メモリ内の Device の state (状態) に状態イベントのデータを書き込みます。このため、状態には常に、Device とそのすべての Control の最新の表現が含まれます。
低レベルのシステムコードには、一般的な Device のデータレイアウトを記述する構造体も含まれています。
Input System (高レベル)
高レベルの Input System コードでは、レイアウト を使用して、Device の状態バッファのデータを解釈します。レイアウトとは、メモリ内での Device とその Control のデータレイアウトを説明します。Input System では、低レベルシステムによって提供される一般的な Device の事前定義された構造体からレイアウトが作成されるか、または、汎用 HID の場合のようにランタイムに動的にレイアウトが作成されます。
Input System では、レイアウトの情報に基づいて、Device のコントロールごとに Control 表現が作成されます。これで、Device 内の個々の Control の状態を読み取ることができます。
高レベルシステムの一部として、Input Control をアプリケーション構造にマップする別の抽象化レイヤーを構築することもできます。アプリケーションへの入力に 1 つ以上の Control を バインド するには、Action を使用します。Input System は、 Control の状態の変化を監視し、コールバック を使用してゲームロジックに通知します。Processor と Interaction を使用して、より複雑な動作を Action に指定することもできます。Processor は、入力データをアプリケーションに送信する前に、そのデータに対して処理を実行します。Interaction では、Control への入力のうち、リッスンする入力のパターン (マルチタップなど) を指定できます。