Version: 2019.1
Windows Mixed Reality の入力
Oculus の入力

OpenVR コントローラーの入力

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 の両方をマシンにインストールして実行する必要があります。

Steam VR ステータスメニュー
Steam VR ステータスメニュー

スクリプトを使ってジョイスティック名のリストでこれらのコントローラーの存在を定期的にチェックして、それらが使用可能であるかをテストできます。コントローラーの電源がオフであったり、バッテリーがなくなると、UnityEngine.Input.GetJoystickNames() によって返されるリストの名前が空の文字列に変わります。コントローラーの電源を再びオンにすると、その名前がリストに再表示されます。

Unity 入力システムマッピング

ここでは、OpenVR デバイスがサポートするそれぞれのタイプのコントローラーの図と、各コントローラーボタンの Unity 入力マッピングの情報を紹介します。

HTC Vive コントローラー

下の図は、VR アプリケーションで使用する HTC Vive コントローラーで使用可能な様々な入力を表示しています。

HTC Vive コントローラー入力マップ (出典 developer.viveport.com)
HTC Vive コントローラー入力マップ (出典 developer.viveport.com)
1 メニューボタン
2 トラックパッド
3 システムボタン
4 ステータスライト
5 マイクロ USB ポート
6 トラックセンサー
7 トリガー
8 グリップボタン

Oculus Touch コントローラー

下の図は、VR アプリケーションで使用する Oculus Touch コントローラーで使用可能な様々な入力を表示しています。

Oculus Touch コントローラー入力マップ (出典 developer.viveport.com)
Oculus Touch コントローラー入力マップ (出典 developer.viveport.com)

Knuckles コントローラー

下の図は、VR アプリケーションで使用する Knuckles コントローラーで使用可能な様々な入力を表示しています。

Valve Knuckles コントローラー入力マップ (出典 steamcommunity.com)
Valve Knuckles コントローラー入力マップ (出典 steamcommunity.com)

下の表は各 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 イベントは、各プラットフォームのコントローラーによって異なります。

  • Event System は、ユーザーがトリガーを握り始めると、HTC Vive コントローラーのトリガーの Input Touch イベントを発します。
  • Event System は、Unity Input が接触を検出したときに、Oculus Touch コントローラーと Valve Knuckles コントローラーのトリガーとなる Input Touch イベントを発します。握ることによるトリガーは必要ありません。

握ることによるトリガーはプラットフォームによって異なります。

  • HTC Vive コントローラーには両サイドに Grip ボタンがありますが、両方とも同じ軸にマッピングされます。押されていないときの値は 0.0 で、押されたときの値は 1.0 です (0.0 と 1.0 の間の値はありません)。

  • Oculus Touch コントローラーのグリップは、範囲が 0.0 から 1.0 のアナログトリガーです (0.0 と 1.0 の間の値は可能です)。

  • Valve Knuckles コントローラーのグリップは、個々の指のタッチセンサーの入力値の加重の平均値です。

Windows Mixed Reality の入力
Oculus の入力