OpenVR / HTC Vive

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

Note: Humanoid Control does not need the SteamVR SDK installed in the project because it uses the low-level OpenVR APII.

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

In Humanoid Control v2.1 and earlier, OpenVR needs to be enabled in the Edit Menu->Preferences->Humanoid->SteamVR Support.

In Humanoid Control v2.2 and higher, three options are available:

  • Disabled: OpenVR is not supported
  • Open VR 1: legacy OpenVR support as in Humanoid Control v2.1 and earlier
  • Open VR 2: OpenVR support using action manifests and support for Skeletal Input. The action manifests are found in Assets/Humanoid/Scripts/Extensions/OpenVR/.

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


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

This option will be enabled automatically when OpenVR is added to the Unity Virtual Reality SDKs.

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.

The SteamVR or OpenVR HMD option is added with a reference to the Real World HMD:

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.

Only when using OpenVR 2, an additional option will be available to enable the SteamVR Skeletal Input.

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.