Develop

Set Up Slide Locomotion

Updated: Sep 8, 2026
In this guide, you will configure a scene for slide locomotion. Because the sliding character collides with the world and falls to the ground, your scene needs a continuous walkable surface with no gaps to fall through.

Before you begin

This guide assumes your scene already contains an OVR Comprehensive Interaction Rig. To add one, follow the Create Comprehensive Rig guide, or select GameObject > Interaction SDK > Add OVR Comprehensive Interaction Rig. The rig supplies the Locomotor prefab and the controller locomotion interactors that this guide configures.
The last two steps configure an existing teleport hotspot. To add one first, follow the Teleport to a Hotspot guide.

Configure the scene for slide locomotion

  1. In the Hierarchy, select Locomotor > LocomotionSettings > Moving. On the MovingSetting component, confirm that Controller Movement is set to Slide. The Locomotor prefab ships with Slide selected, and setting it to Teleport switches the scene to teleport movement instead.
    Note: The ControllerSlideInteractor and ControllerLocomotionSlideActions GameObjects appear disabled in the Hierarchy while you edit the scene. MovingSetting turns them on at scene start while Controller Movement is Slide, so leave them as they are. See Locomotion GameObjects on the interaction rig for the full behavior.
  2. Place colliders on all the physical obstacles in your level and mark them with the same physics layer, such as Default.
  3. In the Hierarchy, select Locomotor > PlayerController. On the Interaction SDK CharacterController component (not Unity’s built-in component of the same name), add both your obstacle layers and the layer your ground uses to Layer Mask. The ground layer is required, because the character will not move at all if it cannot find ground beneath it. Keep grabbable objects, player colliders, and panels on their own layers to avoid unwanted collisions.
    Warning
    On Start, FirstPersonLocomotor casts downward for ground up to Max Start Ground Distance, which defaults to 10 meters. When it finds no ground, it disables velocity movement, which stops gravity, grounding, and slide translation. Turning and teleporting still work, so the symptom is a character that turns but never moves.
    In the Editor and in development builds, it also writes a warning to the Console. A release build disables the movement without logging anything.
    To correct it, add a ground collider below the character controller, or add your ground’s layer to Layer Mask. The ground check ignores trigger colliders.
    To skip the check instead, set Max Start Ground Distance to a negative value. The character then starts without ground beneath it and falls until it lands on something.
  4. On the same component, set Max Slope Angle and Max Step so the character climbs the slopes and steps you intend. Max Slope Angle is the climbable slope in degrees and defaults to 50, and the character stops at any slope steeper than that. Max Step is the climbable step height in meters and defaults to 0.3, and the character stops at any step taller than that.
  5. To let the player physically walk into a hotspot, select the hotspot’s collider child GameObject. It is named Teleport Collider if you created the hotspot with the Teleport Quick Action, or Collider if you dragged in the TeleportHotspot prefab. The Quick Action already makes this collider a trigger sized to the object. With the prefab, set the collider to a trigger yourself so it does not block movement, then raise its height so the player capsule can enter it. The prefab ships a flat 0.02 meter pad, and the LocomotionExamples scene raises it to between 0.45 and 0.8 meters.
  6. Add a TagSet component to the GameObject that carries the TeleportInteractable component, and add the tag Snappable to its Tags list.
    Note: The tag is plain text and nothing validates the spelling, so it must match exactly.

Locomotion GameObjects on the interaction rig

The scene is now configured. The rest of this guide describes the locomotion GameObjects the rig supplies, so you can adjust which ones are active and which buttons drive them. The rig places them under each hand branch, at the same path on both sides:
OVRComprehensiveInteractionRig
└── ComprehensiveInteractorsLeft        (and ComprehensiveInteractorsRight)
    └── Interactors
        └── Controller
            └── LocomotionControllerInteractorGroup
LocomotionControllerInteractorGroup contains the following GameObjects:
  • TeleportControllerInteractor: Teleports the player to a teleport interactable.
  • ControllerTurnerInteractor: Turns the player. On its TurnerEventBroadcaster component, set Turn Method to Snap for one turn per flick of the joystick, or to Smooth for continuous turning.
  • ControllerStepInteractor: Moves the player a fixed distance in one step.
  • ControllerSlideInteractor: Slides the player around the scene. On its SlideLocomotionBroadcaster component, set Aiming to the transform that defines forward, such as the controller for hand-relative movement or the head for view-relative movement. Reshape the Horizontal Dead Zone and Vertical Dead Zone curves to change how joystick input maps to velocity.
  • ControllerLocomotionSlideActions: Sends locomotion events for jumping, running, crouching, and selecting the hotspot under the player. Each action has its own child GameObject: Jump, Run, Crouch, and Select. The test steps at the end of this guide refer to the Run action as sprinting. To change the button that triggers an action, edit the ControllerButtonUsageActiveState component on that child. To remove an action, disable its child GameObject.
  • LocomotionTeleportAudio: Plays the teleport audio cue.
ControllerSlideInteractor and ControllerLocomotionSlideActions are authored with their GameObjects turned off. The MovingSetting component turns them on when Controller Movement is Slide, and turns them off when it is Teleport. It applies that state when the scene starts, so change Controller Movement rather than toggling these two GameObjects by hand.
Two components on LocomotionControllerInteractorGroup itself tie the group together:
  • BestSelectInteractorGroup: Decides which interactor wins when more than one is a candidate.
  • LocomotionEventsConnection: Collects the locomotion events broadcast by the child GameObjects and forwards them to the Locomotor that drives the character.

Building locomotion without the rig

If you are not using the comprehensive rig, copy the Locomotor prefab into your scene and point your own ILocomotionEventBroadcaster implementations at the LocomotionEventsConnection on the prefab root. That component forwards the events to the FirstPersonLocomotor on the child PlayerController GameObject.

Test your Interaction

Use Link to test your project.
  1. Open the Link desktop application on your computer.
  2. Put on your headset, and, when prompted, enable Link.
  3. On your development machine, in Unity Editor, select the Play button.
  4. Use the left joystick to move around the scene, colliding with the world. The right joystick will allow you to turn. You can also crouch by pressing the right joystick down, jump with the A button, sprint by clicking the left joystick and select a hotspot under your feet with the X button.

Learn more

Design guidelines