To facilitate Unity Editor native support for tracked controllers supported by OpenVR, the Unity VR subsystem presents VR controller inputs as separate joysticks. You can access their axis and button values with the UnityEngine.Input class.
By using OpenVR’s controller abstraction, the Unity Editor presents axis and button states in a hardware-agnostic approach (that is, it doesn’t refer to any specific hardware, but uses generic terms). However, for the sake of clarity, the axis and button mappings given below are for the two supported controller types: the HTC Vive controllers, and the Oculus Touch Controllers.
When properly configured and connected, a pair of Oculus Touch Controllers or a pair of HTC Vive controllers appear in the list returned by UnityEngine.Input.GetJoystickNames() as OpenVR Controller - Left and OpenVR Controller - Right. When available, these controllers appear highlighted in green in the SteamVR status window.
Unity script code can test for the availability of these controllers by periodically checking for their presence in the list of joystick names. When the controllers are turned off or have their batteries removed, an empty string replaces their name in the list returned by UnityEngine.Input.GetJoystickNames(). When the controllers are turned on again, their name appears in the list of returned joysticks.
Vive Controller Hardware Feature | Touch Controller Hardware Feature | Interaction Type | Unity Button ID | Unity Axis ID | Unity Axis Value Range |
---|---|---|---|---|---|
Left Controller Menu Button (1) | Button.Three | Press | 2 | ||
Right Controller Menu Button (1) | Button.One | Press | 0 | ||
Left Controller Trackpad (2) | Button.PrimaryThumbstick | Press | 8 | ||
Right Controller Trackpad (2) | Button.SecondaryThumbstick | Press | 9 | ||
Left Controller Trackpad (2) | Button.PrimaryThumbstick | Touch | 16 | ||
Right Controller Trackpad (2) | Button.SecondaryThumbstick | Touch | 17 | ||
Left Controller Trackpad (2) | Axis2D.PrimaryThumbstick | Horizontal Movement | 1 | –1.0 to 1.0 | |
Left Controller Trackpad (2) | Axis2D.PrimaryThumbstick | Vertical Movement | 2 | –1.0 to 1.0 | |
Right Controller Trackpad (2) | Axis2D.SecondaryThumbstick | Horizontal Movement | 4 | –1.0 to 1.0 | |
Right Controller Trackpad (2) | Axis2D.SecondaryThumbstick | Vertical Movement | 5 | –1.0 to 1.0 | |
Left Controller Trigger (7) | Axis1D.PrimaryIndexTrigger | Touch | 14 | ||
Right Controller Trigger (7) | Axis1D.SecondaryIndexTrigger | Touch | 15 | ||
Left Controller Trigger (7) | Axis1D.PrimaryIndexTrigger | Squeeze | 9 | 0.0 to 1.0 | |
Right Controller Trigger (7) | Axis1D.SecondaryIndexTrigger | Squeeze | 10 | 0.0 to 1.0 | |
Left Controller Grip Button (8) | Axis1D.PrimaryHandTrigger | Squeeze | 11 | 0.0 to 1.0 | |
Right Controller Grip Button (8) | Axis1D.SecondaryHandTrigger | Squeeze | 12 | 0.0 to 1.0 |
Notes: