OpenVR / HTC Vive

OpenVR (SteamVR) is supported for Head Mounted Devices and Hand Controllers.

The Vive Trackers are documented separately.

Information about the use of VRTK with Humanoid Control is found here.



OpenVR is supported in InstantVR version 3.4 and higher. Steam VR controllers are only supported in InstantVR Advanced and Edge version 3.4 and higher.

Humanoid Control

OpenVR is supported in the Humanoid Control VR, Plus and Pro packages


HTC Vive, Oculus Rift and Mixed Reality are supported through OpenVR .

Operating System

OpenVR is supported on Windows 10. MacOS support is available on request.


Pre Unity 2017.2: Virtual Reality Supported needs to be enabled in Edit Menu->Project Settings->Player->Other Settings. OpenVR needs to be added to the Virtual Reality SDKs.

Unity 2017.2 and higher: Virtual Reality Supported needs to be enabled in Edit Menu->Project Settings->Player->XR Settings. OpenVR needs to be added to the Virtual Reality SDKs.

Note: if both Oculus and SteamVR need to be supported in one build, make sure Oculus is listed higher than OpenVR in the Virtual Reality SDKs:


SteamVR needs to be enabled in the Edit Menu->Preferences->Instant VR->SteamVR Support.

The script IVR_SteamVR needs to be added to the character GameObject with the InstantVR script.

Humanoid Control

OpenVR needs to be enabled in the Edit Menu->Preferences->Humanoid->SteamVR Support.

Disabling SteamVR Support ensures that no code related to SteamVR is included in the build.


To enable body tracking with SteamVR for an avatar, SteamVR needs to be enabled in the Humanoid Control component.

Head Target

First Person Camera needs to be supported for the OpenVR HMD. For convenience, this option is also found on the Humanoid Control script.

Hand Target

The Steam VR Controller needs to be enabled on the Hand Targets for controller support.

Controller models are shown in the scene when Humanoid Control->Settings->Show Real Objects is enabled. These models can be moved in the scene to place the controllers to the right position relative to the hands of the avatar. A reference to these transforms is found in the Tracker Transform field.

Controller Input

The buttons of the Steam VR controller can be accessed using the Game Controller Input. The buttons are mapped as follows:

Left Controller
Menu button controller.left.option / controller.left.button[0]
Touchpad touch controller.left.stickTouch
Touchpad press controller.left.stickButton
Touchpad movements controller.left.stickHorizontal/stickVertical
Trigger controller.left.trigger1
Grip controller.left.trigger2
Right Controller
Menu button controller.right.option / controller.right.button[0]
Touchpad touch controller.right.stickTouch
Touchpad press controller.right.stickButton
Touchpad movements controller.right.stickHorizontal/stickVertical
Trigger controller.right.trigger1
Grip controller.right.trigger2



By default, the origin position will be set at (0,0,0). This will be sufficient in most cases.

It is possible to set the origin manually though. The real world position and orientation of the origin can be set using the Tracker Position/Tracker Angles parameters in the IVR_UnityVR script.

When using the InputHandler example script, calibration is initiated when the Tab key on the keyboard is pressed or when the two Option buttons on any controller are pressed simultaneously.

Humanoid Control

The tracking position and orientation can be calibrated during gameplay by calling the Calibrate() function on the HumanoidControl object. This is often implemented using the Controller Input component.