Here I present an easy-to-use teleportation system for the HTC Vive and the Unity game engine. The system is modelled
after Valve's game for the Vive The Lab, a game where the player can
traverse VR environments that are bigger than the play area. You can check out the project source code
here on Github. The Github project is open source and licenced under the MIT
Myself demoing the system in the HTC Vive
This system solves a number of problems:
Calculating Navigable Space: You obviously don’t want the player to be able to teleport out of bounds, or inside
opaque objects. To solve this problem, my system uses Unity’s generated Navigation Mesh as the boundaries that the
player can teleport to. Because this process is piggybacking Unity’s work, it is stable and can be used reliably
in most projects. In order to preload this data, simply add a “Vive Nav Mesh” component anywhere in your scene, and
click the “Update Navmesh Data” button in the inspector. You can of course update the Vive Nav Mesh component with
new NavMesh bakes whenever you update the scene. The above process is illustrated below:
The process of updating the Vive navmesh.
Selecting a Teleport Destination: This system uses an intuitive parabolic curve selection mechanism using simple
kinematic equations. Once again, this was inspired by Valve’s The Lab. As the user raises their controller to a higher
angle, the selection point grows farther away. If the user raises the remote past 45 degrees (maximum distance of a parabolic
curve) the angle stays locked at that distance.
Representing the Play Area: It is often useful to know where the chaperone boundaries will be after teleporting. For
this reason the system draws a box around where the chaperone bounds will be.
Reducing Discomfort: The screen fades in and fades out upon teleportation (the display “blinks”), reducing fatigue
and nausea for the user.
Once again you can take a look at the project here on Github. Thanks for