# Navigation modes

To enable the user to navigate inside your scene you first need the camera to be converted into an Interactive Rig (see [previous step](https://unity.zoeimmersive.com/getting-started/interaction-rig)). Select the InteractionRIg(IO) and in the Inspector check the navigation option then choose the system you want. We currently offer two navigation systems: the **Teleportation system** and the **Joystick free navigation.**

<figure><img src="https://2377590261-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fz0pDcUm114qZSWNhbhEt%2Fuploads%2FU2fwsClqhrZbJOIn8IMG%2FNavigationSystems.png?alt=media&#x26;token=a912d777-40ac-4fe3-bb00-3f5c5d4bfc7d" alt=""><figcaption><p>Navigation options</p></figcaption></figure>

## Joystick Navigation

User moves forward, backward, left and right by simply pushing the joystick in the same directions. You can choose the speed of navigation:

<figure><img src="https://2377590261-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fz0pDcUm114qZSWNhbhEt%2Fuploads%2Fr78avzkyGRn2E4Dkg3cE%2FJoystickNavigation.PNG?alt=media&#x26;token=a4213b2d-7ba3-43d4-b62f-8ec2a9640cd5" alt=""><figcaption><p>Joystick navigation settings</p></figcaption></figure>

## Teleport Navigation

Teleportation allows the user to select a nearby spot and be ported there as if they had jumped in no time.<br>

By default, the Teleport button is the **joystick** of the controller. Users first need to press and hold ‘up’ while aiming at the floor for the teleport beam to show up. When teleporting is possible, a circular target appears on the surface at the end of the beam. With the thumb, users can now turn the **joystick** (or the trackpad) to orientate the target position they will appear. Finally **release** to teleport to that spot.

Teleport has several settings that you can change at will.

<figure><img src="https://2377590261-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fz0pDcUm114qZSWNhbhEt%2Fuploads%2F83e7mrsdppnDBuOC0ztO%2FTeleportNavigation.PNG?alt=media&#x26;token=b51aa776-fc26-4851-a694-22e8a6b03fd7" alt=""><figcaption><p>Teleport settings</p></figcaption></figure>

* **Controller for teleporting**: choose between Left/Right or Both controllers.
* **Teleport Distance** : maximum distance (meters) the beam reaches around the user.
* **Teleport Height**: maximum height (meters) for the beam.
* **Orient on Teleport**: allow the user to choose the orientation when they are going to teleport to a spot.
* **Hold Duration**: time (seconds) the user needs to hold the Joystick/trackpad for the beam to appear.
* **Input Sensitivity**: threshold for detecting user’s input on the Joystick/trackpad to launch a teleporting.
* **Pause Time**: time (seconds) to wait between each teleporting movement.
* **Teleport Target**: visual at the end of the beam when a teleport surface is reached. Note: we recommend not to change this.
* **Allowed/Not Allowed Destination**: color for the beam depending on the surface that is being aimed. Note: only surfaces (colliders) that are under the ‘Teleport’ Layer are considered allowed destinations.
* **Line Width**: width in meters of the beam.
* **Line Material:** material for the beam. Note: we recommend not to change this.

{% hint style="info" %}
For teleporting to a surface you need the mesh to be placed under the ‘Teleport’ Layer from Unity and make sure there is a collider of the shape of your surface.

Zoe provides a Floor prefab that you can directly add to your scene from the Zoe top bar menu.
{% endhint %}

## Camera Rotation

For both the **Teleportation** and the **Joystick** systems there is an option to rotate the camera as well with the controller.

<figure><img src="https://2377590261-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fz0pDcUm114qZSWNhbhEt%2Fuploads%2FPXfuSVKp418olmXPhhFD%2FCameraRotation.PNG?alt=media&#x26;token=6812188b-11e3-4957-b4ba-48df988acd1b" alt=""><figcaption><p>Camera Rotation Options</p></figcaption></figure>

Set it with the following options:

* **Left/Right/Both** joystick(s): controller to be used for the rotation; make sure you choose an option that matches with the one for movement.
* **Angle**: the angle (degrees) the camera is rotated at every input.

{% hint style="info" %}
If you don't have a headset or simply want to test/debug without it simply add the 'FPS Camera Controller' component to the Interaction Rig. Use WASD and mouse to interact.
{% endhint %}
