Design of Teleportation and Locomotion System in VR
Movement in VR — not gameplay detail. It's main reason players abandon VR games in first 20 minutes or return daily. Incorrectly implemented locomotion — direct path to motion sickness. Correct — transparent system player stops noticing in minutes.
Physics of discomfort: why smooth movement makes sick
Motion sickness in VR arises from vection — motion illusion without real movement. Visual system tells brain "we move", vestibular apparatus — "we stand", conflict causes nausea in 40–60% audience at first experience.
Smooth movement through stick — maximum vection trigger. Doesn't mean can't use. Means must implement mitigation mechanics.
Main — locomotion vignette. During movement peripheral vision (beyond 40–50° from center) darkens through tinted overlay. Brain perceives movement only through central zone, reducing vection. In Unity realize through post-processing Vignette effect with dynamic intensity linked to movement speed via RTPC, or specialized component — TunnelingVignette in XRIT 3.x.
Vignette parameters for starter setup: easeInTime = 0.15 s, easeOutTime = 0.3 s, featheringEffect = 0.3, vignetteIntensity = 0.6. All should be in Comfort Settings — different players different sensitivity.
Teleportation: not just "move position"
Teleportation seems simple: press button, select point, move. Actually several details separate "works" from "works well".
Arc visualization — parabola from controller to teleport point. In XRIT realized through XRRayInteractor in Projectile Curve mode + TeleportationProvider. Parabola parameters: velocity = 8–12 (less — arc too steep, more — too shallow), acceleration = -9.8 (gravity). Landing point determined through raycast against Teleportation Area/Anchor colliders with Layer Mask only Teleportation layer.
Teleport point validity. Can't teleport to air, wall, NavMesh-inaccessible zone. TeleportationArea only checks collider, not NavMesh. For NavMesh check — custom TeleportationArea with override ValidateTeleportation calling NavMesh.SamplePosition at landing point.
Post-teleportation orientation. Simple: keep current orientation. Better: let player indicate gaze direction after teleport through stick rotation while holding button. TeleportationProvider supports MatchOrientation = TargetUpAndForward — XR Origin rotates so player after teleport looks in indicated direction.
Transition animation. Instant teleport — jarring. Fade to black + fade in 0.2–0.3 s — doesn't delay player, removes camera "jump". Realization: ScreenFadeProvider in Locomotion System intercepts TeleportationProvider.teleportRequest and adds fade through coroutine before actual XR Origin move.
Hybrid system: when both types needed
Most modern VR games use both locomotion types and give player choice in settings. XRIT Locomotion System supports this: one LocomotionSystem can have multiple LocomotionProvider registered simultaneously.
Important nuance: ContinuousMoveProvider and TeleportationProvider can conflict on simultaneous input. LocomotionSystem has exclusivityMode — when one provider active, others blocked. Correct behavior, but ensure priorities right: teleportation should have priority over smooth movement.
Snap Turn vs Smooth Turn
Snap Turn — instant rotation by fixed angle (usually 30°, 45° or 60°). No continuous rotation discomfort. Realized through SnapTurnProvider. Settings: turnAmount = 45°, debounceTime = 0.2 s (not rotate too fast on stick hold).
Smooth Turn — continuous rotation through ContinuousTurnProvider. Less discomfort than smooth forward movement, but uncomfortable for part of audience. Maximum comfortable rotation speed: 60–90°/s.
For combat games needing quick orientation — hybrid: snap turn small angle (22.5° or 30°) allows quick turning without discomfort.
| System | Timeline |
|---|---|
| Basic teleportation (XRIT out of box) | 3–5 days |
| Teleportation + smooth + snap + settings | 1–2 weeks |
| Custom system with NavMesh + transition + vignette | 2–4 weeks |
| Full locomotion system with comfort profiles | 3–5 weeks |
Cost calculated after gameplay requirements and target platforms analysis.





