XR Interaction Toolkit を Input System (Action-based) で利用する【XR Interaction Toolkit】
XR Interaction Toolkit を Input System で利用してみました.
Input System
マウス,キーボード,ゲームパッド等の各デバイスの操作について,Actionに纏め一括管理することが出来るパッケージです. 現行を Input Manager と呼ぶに対して,こちらは Input System と呼ばれます.
詳細についてはこちらの動画,資料が詳しいです.
Action-based と Device-based
XR Interaction Toolkit は 0.9 までは Device-based (デバイス依存) 入力方式でしたが, 0.10 から Action-based という Input System 対応の入力方式が追加実装されました.
現時点では Device-based の方がとっかかりやすいですが,Action-based だと恩恵がある所もあるので, 勉強がてら Action-based を利用してみます.恩恵については後程別記事でまとめます.
Action-based と Device-based の二種類あるスクリプトコンポーネントは以下の通りです.
- XR Controller
- Continuous Move Provider
- Continuous Turn Provider
- Snap Turn Provider
コントローラ操作に関わる機能ですね.
準備
Input System にする
入力方式を Input Manager から Input System にします.
Project Settings > Player > Other Settings > Configuration|Active Input Handling で設定を行います. Both か Input Manager (Old) か Input System Package (New) かで選択できますが, 今回は Input System Package 一本化にします.設定変更後 Unity が再起動します.
Default Input Actions のインポート
まず,Package Manager の XR Interaction Toolkit の Samples に Default Input Actions があるのでインポートします.
これにより XR Interaction Toolkit の Input Actions 設定を入手できます.
Device-based を Action-based に置換
Action-based に切り替えたい場合は,Device-based から Action-based に置換する作業を行います. 地道な作業ですが,以下を Device-based から Action-based に替えます. XR Controller は同じオブジェクトに1つしかアタッチできないので,Device-based は Remove する必要があります.
- XR Controller
- Continuous Move Provider
- Continuous Turn Provider
- Snap Turn Provider
各 Action-based スクリプトの設定
さて,Action-based に切り替えましたが,諸々設定箇所があります. これらを一から設定するのは骨が折れるので,ここで先ほどインポートした Default Input Actions を利用します. プリセット形式で提供されているので,Inspector に preset ファイルを D&D すれば各設定が完了します.
例えば,Left Hand Controller の XR Controller (Action-based) に XRI Default Left Controller を当てはめる場合は以下の感じです.
これを Right Controller,Continuous Move / Turn,Snap Turn にも繰り返します.
Input Action Manager
Input Action Manager を設定します.これは忘れがちですが大事な作業です. Action Assets には Default Input Actions の XRI Default Input Actions を設定します.
ここまでで設定準備完了です.
動作確認
Device-based と同様な動作が出来ているか確認を行います.
Action-based でも同様な動作が出来ていました.