Unity エディターが OpenVR で追跡するコントローラーをサポートするために、Unity VR のサブシステムは VR コントローラーの入力を別々のジョイスティックとして表示します。UnityEngine.Input クラスを使用して、軸とボタンの値にアクセスします。
OpenVR と Unity とのインテグレーションは、軸とボタンの状態を表示するときに特定のハードウェアを参照しません。このページでは、OpenVRでサポートされている 3 種類のコントローラー、HTC Vive、Oculus Touch、Valve Knuckles コントローラーの軸とボタンのマッピングを説明します。
正しく設定され接続されると、OpenVR 互換コントローラーはすべて内部的に、OpenVR Controller - Left または OpenVR Controller - Right のいずれかに命名されます。この名前には、UnityEngine.Input.GetJoystickNames() によって返されたリストを通してアクセスします。利用可能な場合、これらのコントローラーは Steam でテストされたときに SteamVR ステータスメニューの緑色でハイライト表示されます。このメニューにアクセスするには、Steam と SteamVR の両方をマシンにインストールして実行する必要があります。
スクリプトを使ってジョイスティック名のリストでこれらのコントローラーの存在を定期的にチェックして、それらが使用可能であるかをテストできます。コントローラーの電源がオフであったり、バッテリーがなくなると、UnityEngine.Input.GetJoystickNames() によって返されるリストの名前が空の文字列に変わります。コントローラーの電源を再びオンにすると、その名前がリストに再表示されます。
ここでは、OpenVR デバイスがサポートするそれぞれのタイプのコントローラーの図と、各コントローラーボタンの Unity 入力マッピングの情報を紹介します。
下の図は、VR アプリケーションで使用する HTC Vive コントローラーで使用可能な様々な入力を表示しています。
1 | メニューボタン |
---|---|
2 | トラックパッド |
3 | システムボタン |
4 | ステータスライト |
5 | マイクロ USB ポート |
6 | トラックセンサー |
7 | トリガー |
8 | グリップボタン |
下の図は、VR アプリケーションで使用する Oculus Touch コントローラーで使用可能な様々な入力を表示しています。
下の図は、VR アプリケーションで使用する Knuckles コントローラーで使用可能な様々な入力を表示しています。
下の表は各 OpenVR がサポートするコントローラー、インタラクションタイプ、Unity の軸とボタンの ID、各軸の値の範囲を表しています。
HTC Vive コントローラー | Oculus Touch コントローラー | Valve Knuckles コントローラー | インタラクションタイプ | Unity Button ID | Unity Axis ID | Unity Axis 値の範囲 |
---|---|---|---|---|---|---|
Left Controller Menu Button (1) | Button.Three | Left Controller Inner Face Button | 押す | 2 | ||
Right Controller Menu Button (1) | Button.One | Right Controller Inner Face Button | 押す | 0 | ||
Left Controller Outer Face Button | 押す | 3 | ||||
Right Controller Outer Face Button | 押す | 1 | ||||
Left Controller Trackpad (2) | Button.PrimaryThumbstick | Left Controller Trackpad | 押す | 8 | ||
Right Controller Trackpad (2) | Button.SecondaryThumbstick | Right Controller Trackpad | 押す | 9 | ||
Left Controller Trackpad (2) | Button.PrimaryThumbstick | Left Controller Trackpad | 接触 | 16 | ||
Right Controller Trackpad (2) | Button.SecondaryThumbstick | Right Controller Trackpad | 接触 | 17 | ||
Left Controller Trackpad (2) | Axis2D.PrimaryThumbstick | Left Controller Trackpad | 水平移動 | 1 | –1.0 から 1.0 | |
Left Controller Trackpad (2) | Axis2D.PrimaryThumbstick | Left Controller Trackpad | 垂直移動 | 2 | –1.0 から 1.0 | |
Right Controller Trackpad (2) | Axis2D.SecondaryThumbstick | Right Controller Trackpad | 水平移動 | 4 | –1.0 から 1.0 | |
Right Controller Trackpad (2) | Axis2D.SecondaryThumbstick | Right Controller Trackpad | 垂直移動 | 5 | –1.0 から 1.0 | |
Left Controller Trigger (7) | Axis1D.PrimaryIndexTrigger | Left Controller Trigger | 接触 | 14 | ||
Right Controller Trigger (7) | Axis1D.SecondaryIndexTrigger | Right Controller Trigger | 接触 | 15 | ||
Left Controller Trigger (7) | Axis1D.PrimaryIndexTrigger | Left Controller Trigger | 握る | 9 | 0.0 から 1.0 | |
Right Controller Trigger (7) | Axis1D.SecondaryIndexTrigger | Right Controller Trigger | 握る | 10 | 0.0 から 1.0 | |
Left Controller Grip Button (8) | Axis1D.PrimaryHandTrigger | Left Controller Grip Average | 握る | 11 | 0.0 から 1.0 | |
Right Controller Grip Button (8) | Axis1D.SecondaryHandTrigger | Right Controller Grip Average | 握る | 12 | 0.0 から 1.0 | |
Left Controller Index Finger Cap Sensor | 20 | 0.0 から 1.0 | ||||
Right Controller Index Finger Cap Sensor | 21 | 0.0 から 1.0 | ||||
Left Controller Middle Finger Cap Sensor | 22 | 0.0 から 1.0 | ||||
Right Controller Middle Finger Cap Sensor | 23 | 0.0 から 1.0 | ||||
Left Controller Ring Finger Cap Sensor | 24 | 0.0 から 1.0 | ||||
Right Controller Ring Finger Cap Sensor | 25 | 0.0 から 1.0 | ||||
Left Controller Pinky Finger Cap Sensor | 26 | 0.0 から 1.0 | ||||
Right Controller Pinky Finger Cap Sensor | 27 | 0.0 から 1.0 |
注意: 上の表に記載のない機能には OpenVR API を通してアクセスすることができません。したがって、Unity の入力システムでアクセスすることもできません。
OpenVR デバイスをサポートするアプリケーションを開発する場合は、3 つのコントローラーすべてのボタンの入力イベントトリガーとレスポンスレートの違いに注意することが重要です。
Unity Touch の Input イベントは、各プラットフォームのコントローラーによって異なります。
握ることによるトリガーはプラットフォームによって異なります。
HTC Vive コントローラーには両サイドに Grip ボタンがありますが、両方とも同じ軸にマッピングされます。押されていないときの値は 0.0 で、押されたときの値は 1.0 です (0.0 と 1.0 の間の値はありません)。
Oculus Touch コントローラーのグリップは、範囲が 0.0 から 1.0 のアナログトリガーです (0.0 と 1.0 の間の値は可能です)。
Valve Knuckles コントローラーのグリップは、個々の指のタッチセンサーの入力値の加重の平均値です。