Meta/Oculus Quest

Meta/Oculus Quest and Quest 2 are supported to track head and hands of an avatar. In the text we will only mention Quest, but everything is valid for both Quest 1 and 2 (and hopefully Quest Pro soon!)

In the Editor an Oculus Rift can be used for testing the scene even when the platform is set to Android. For final testing on the Oculus Quest, a build needs to be made and transferred to the Quest.

The easiest solution for building for Quest is to connect the Quest to the PC with an USB cable and then select Build And Run in the File menu of Unity. Please note that the Oculus Quest needs to have Developer Mode enabled for this (see


Humanoid Control

Oculus Quest is supported in Humanoid Control VR, Plus and Pro version 2.2 and higher.

Hand tracking with the Oculus Quest is supported in Humanoid Control Plus and Pro version 3.1 and higher.

Operating System

Oculus Quest is supported on the Android platform. Ensure Android is selected as platform in Build settings


Pre Unity 2017.2: Virtual Reality Supported needs to be enabled in Edit Menu->Project Settings->Player->Other Settings. Oculus 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. Oculus needs to be added to the Virtual Reality SDKs.

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

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


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

The Device Type needs to be set to Oculus Quest. This will ensure that the controllers in both hands will have positional tracking.

Head Target

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

Hand Target

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

Oculus Quest 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 Oculus Quest controller can be accessed using the Game Controller Input. The buttons are mapped as follows:

Left Controller

X Buttoncontroller.left.button[0]
Y buttoncontroller.left.button[1]
Thumbstick touchcontroller.left.stickTouch
Thumbstick presscontroller.left.stickPress
Thumbstick movementscontroller.left.stickHorizontal, .stickVertical
Index triggercontroller.left.trigger1
Hand triggercontroller.left.trigger2

Right Controller

A buttoncontroller.right.button[0]
B buttoncontroller.right.button[1]
Thumbstick touchcontroller.right.stickTouch
Thumbstick presscontroller.right.stickPress
Thumbstick movementscontroller.right.stickHorizontal, .stickVertical
Index triggercontroller.right.trigger1
Hand triggercontroller.right.trigger2

Hand Tracking (Plus & Pro)

For Hand Tracking in Humanoid Control Plus and Pro, make sure the installed OVR Utilities Plugin is at least version 1.44.0. This can be ensured by installing the Oculus Integration package in the project and upgrading to the latest plugin version. It is expected that future versions of Unity have version 1.44.0 or higher already built in, so that importing the Oculus Integration Package is no longer necessary.

You can enable hand tracking in the Humanoid Control component:

On the Hand Targets you will find a reference to the Hand Skeleton:

The skeleton is a representation of the user’s hands. They will be rendered when ‘Show Real Objects’ is enabled.

Please make sure that for hand tracking, ‘Use Hands’ is enabled in the Settings of the Oculus Quest itself or hand tracking will not work.


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