To use InstantVR you need an environment first. The minimum is a flat terrain with a directional light, but you can make it as complex as you want with lots of meshes, rigidbodies and colliders. You are only bound by the limits of Unity and the computer used to drive the game.

You should not include a camera or other first or third person objects in your game. This is fully handles by InstantVR.

Then you should include the InstantVR package which you can download from this site.

To complete the scene you should drag one of the prefabs from the folder InstantVR into your scene.

Now you can press play and walk around your wonderful environment.

Extensions can be added to every GameObject with an InstantVR script attached to extend the tracking functionality. Extensions will typically implement support for specific input devices like the Oculus Rift or Microsoft Kinect, but also include extensions for animations or networking.

Multiple extensions can be added to a single InstantVR gameObject. The extensions which will be used at play time depends on:

  • availability: is the hardware associated with the extension present?
  • priority: the extensions with the highest priority are chosed over lower priority extensions.
  • tracking: is the hardware currently tracking?

In the example below, we have added 5 extensions: Oculus Rift, Leap Motion, Kinect 2, Traditional (Xbox 360/mouse/keyboard) and Animator.

Dynamic behaviour

During gameplay with all supported hardware available the behaviour is as follows:

  • Oculus Rift will always be used for head tracking. It has the highest priority and is always tracking.
  • Leap Motion is used for tracking the hands when the hands are in the field of view of the Leap Motion camera. When the hands are outside the view they cannot be tracked by the Leap Motion so it will not be used then. Hand tracking will drop down to the next hand tracker in the hierarchy
  • Kinect 2 supports tracking of all 6 tracking targets, but in this case it will not be used for head tracking, because the Oculus Rift has a higher priority. It will be used for hand tracking when the hands are outside the view of the Leap Motion camera. All other body parts are tracked by Kinect 2 all the time.
  • Traditional input is can be used for walking around
  • The animator is not used, as all targets are tracked by Kinect.

When the game is played with just the Oculus Rift available, it will behave like this:

  • Oculus Rift will always be used for head tracking. It has the highest priority and is always tracking.
  • Leap Motion and Kinect 2 are not available, so will not be used
  • Traditional input is can be used for walking around
  • The animator is used to move all targets except the head, which is tracked by the Oculus Rift. This results in leg and arm movements during walking and rotation movements.

Traditional and Animator are typically used when no or limited VR hardware are available and it is good practice to have them as the lowest 2 priority spots as it is shown here.

During play mode in the editor it is possible to view which extensions are currently used for each target by switching to debug view:


In this case we have the extensions for Oculus Rift, Razer Hydra, Microsoft Kinect, the traditional and animator extensions configured. In the debug view of InstantVR you can see the various controllers used: Rift for the Head Target, Hydra for the Hand Targets and Kinect for the Hip and Feet Targets.

The following video demonstrates the behaviour:


Every extension implements one or more controllers for targets. The Oculus Rift extension has one controller: the Rift Head Controller which is used solely for the head target. The Leap Motion and Razer Hydra extensions just have a Hand Controller which is used for the left and right hands, while the Kinect extensions have controllers for every target as they can track the full body.

If we look into the Targets themselves we can see the controllers currently associated with that target. Here we have an example of the Head Target:


You can see the Rift and Kinect Head Controllers. Like the priority for extensions the order in which the controllers appear determines the priority. This order is in fact controlled by the ordering of the extensions. So you need to reorder the extension when you want to change the priority of the Head Controllers. Direct changes in the order of controllers will be undone automatically.

Note: the controller priorities and positions are not updated when the inspector is in Debug mode. This is a known issues and is reported to Unity. The priorities and ordering will be corrected when the inspector is switched back to Normal mode.

It is possible to disable specific controllers. For instance: if you do not want to use Kinect Head tracking when the Rift is not available, but you do want to use Kinect for the rest of the body, you can disable the Kinect Head Controller. This is done by disabling the IVR_Kinect Head by unchecking the script in the example above. If you want to disable all controllers of an extension, it is better to remove the extension altogether.