---
title: "3.1 - Comfort and Accessibility"
content_type: tutorial
url: "https://learn.unity.com/tutorial/3-1-comfort-and-accessibility-2?language=en"
language: en
difficulty: beginner
duration_minutes: 90
unity_version:
  - "6.3"
  - "6.2"
  - "6.1"
  - "6.0"
supported_unity_versions:
  - name: "6.3"
    url: "https://learn.unity.com/tutorial/3-1-comfort-and-accessibility-2.md?language=en&version=6.3"
  - name: "6.2"
    url: "https://learn.unity.com/tutorial/3-1-comfort-and-accessibility-2.md?language=en&version=6.2"
  - name: "6.1"
    url: "https://learn.unity.com/tutorial/3-1-comfort-and-accessibility-2.md?language=en&version=6.1"
  - name: "6.0"
    url: "https://learn.unity.com/tutorial/3-1-comfort-and-accessibility-2.md?language=en&version=6.0"
  - name: "2022.3"
    url: "https://learn.unity.com/tutorial/3-1-comfort-and-accessibility-2.md?language=en&version=2022.3"
  - name: "2021.3"
    url: "https://learn.unity.com/tutorial/3-1-comfort-and-accessibility-2.md?language=en&version=2021.3"
available_languages:
  - name: "en"
    url: "https://learn.unity.com/tutorial/3-1-comfort-and-accessibility-2.md?language=en"
  - name: "es"
    url: "https://learn.unity.com/tutorial/3-1-comodidad-y-accesibilidad.md?language=es"
last_updated: "2026-08-04T14:21:35.000Z"
---

# 3.1 - Comfort and Accessibility

Learn practical techniques to reduce simulator sickness in VR and make your application more comfortable and accessible.

In this lesson, you will learn how to reduce the risk of simulator sickness and increase the inclusivity or your app, allowing it to be enjoyed by as many people as possible. By the end of this lesson, your app will be more comfortable and accessible.

This lesson is part of the [Create with VR course](https://learn.unity.com/course/create-with-vr).

Overview: [Video](https://connect-mediagw.unity.com/h1/20250923/videos/19252e7b-9def-4efe-9352-25352ea01195_3_1_0_intro_v2_1.59.25_PM.mp4) ([Transcript (en)](https://connect-mediagw.unity.com/h1/20250924/0752d7a2-13bd-4426-b928-e4b82609f535_3_1_0_intro_v2.vtt))

## 1. Create a black canvas for fading

When the scene loads, it can be a little jarring to just appear in a new world. It’s generally good to fade into new environments.

[Video](https://connect-mediagw.unity.com/h1/20250917/videos/857ea7b8-09f3-4919-9982-cc30a1d3a124_3.1.1.mp4)

**1.  Make a new Screen Space Canvas GameObject to fade in from:**

- Right-click in the **Hierarchy** window, then select **UI** > **Canvas.**
- Rename it “Fade_Canvas”.

**2.  Make the Canvas render directly in front of the camera:**

- In the **Fade_Canvas** GameObject, in the **Canvas** component, set the **Render Mode** property to **Screen Space - Camera**.
- Set the **Render Camera** property to the **Main Camera** GameObject.

**3.  Make the canvas black:**

- Right-click your **Fade_Canvas** GameObject and select **UI** > **Image**.
- In the **Image** GameObject’s **Image** component, set the **Color** property to black**.**
- In the **Rect Transform** component, set the **Scale** property’s **X** and **Y** values to a large number (for example, **100**) to make sure the canvas covers your whole field of view.

**4.  Make the canvas appear directly in front of the Main Camera GameObject and in front of all other GameObjects:**

- In the **Canvas** component, set the **Plane Distance** property to **0.1**.
- Set the **Order in Layer** property to **1**.

![](https://connect-mediagw.unity.com/h1/20250923/learn/images/69fc3fba-f3e2-4fa4-a17a-f56ae0a5281f_CanvasPlaneDistance.png)

The black canvas should now completely cover the field of view when you run the program.

## 2. Fade in on scene load

Now that you have the black canvas set up, you need to fade from it on scene load.

[Video](https://connect-mediagw.unity.com/h1/20250917/videos/342d054c-87c6-4543-b0c1-d800209eedeb_3.1.2.mp4)

**1.  Allow the canvas and all of its elements to fade:**

- On the **Fade_Canvas** GameObject, add a **Canvas** **Group** component and a **Fade** **Canvas** component.

**2.  Make an event that detects when the scene has loaded:**

- In the **Hierarchy** window, add an empty GameObject and rename it “Scene Loader”. It will hold your scene loading events.
- Add an **On** **Scene** **Load** component to the **Scene Loader** GameObject.

**3.  Fade in from black on scene load:**

- On the **Scene Loader** GameObject, in the **On Load** event, select the **Add** (**+**) button to add a new function.
- Assign the **Fade_Canvas** GameObject.
- Open the **No Function** dropdown and select the **FadeCanvas** > **StartFadeOut ()** function.

**4.  Hide the black image in the Scene view by default:**

- Set the **Canvas** **Group** component’s **Alpha** property value to **0**.

The scene should now appear to fade in from black when the scene loads. You can test this using the reset scene UI screen you made.

## 3. Add a settings panel

In order to add some settings, you’ll add a new panel that can be accessed from the main menu panel.

[Video](https://connect-mediagw.unity.com/h1/20250917/videos/44ae7edb-497f-4030-a0e4-a1d90828ad51_3.1.3.mp4)

**1.  Add a new settings button:**

- In the **Hierarchy** window, right-click the **Welcome Background** GameObject and select **UI** > **Button - TextMeshPro** to add a button.
- Rename it “Settings Button”.
- In the **Image** component, set the **Source Image** property to **Icon_Gear**.
- Delete the default Text in the **Inspector** window so that it has no text on it.

![](https://connect-mediagw.unity.com/h1/20250917/learn/images/ccd84fec-a048-4760-8a1d-e50150a0e55c_buttonText.png)

- Resize and reposition the button so it fits nicely on the menu.

**2.  Create a new settings screen:**

- In the **Hierarchy** window, duplicate the **Welcome Background** GameObject.
- Rename the copied GameObject “Settings Background”.
- Temporarily disable the **Welcome Background** GameObject so you can only see the **Settings** **Background** GameObject for easier editing.

**3.  Add placeholder content to the settings screen:**

- Delete the **Button** and **Welcome** **Text** GameObjects from the **Settings** **Background** GameObject.
- Replace the contents of the panel with three placeholder **Text** GameObjects (“Setting 1” / “Setting 2” / “Setting 3”)
- Add a **UI** > **Toggle** GameObject next to each setting, deleting the default text that is generated by the toggle.
- You might want to parent each **Toggle** to it’s related **Text** GameObject to group them together.

**Note**: Use **TextMeshPro** **Text** for the labels instead of the default **Text** **label** that comes with the toggle.

**4.  Update the Settings buttons:**

- In the **Settings** **Background** GameObject, change the name of the **Settings** **Button** to “Close Button”.
- In the **Gear** icon’s **Image** component, change the **Source Image** property from **Icon_Gear** to **Icon_Close**.

**5.  Allow the user to go back and forth between these menus:**

- In the **Settings** **Button** GameObject’s **Button** component’s **On Click** property**,** enable settings screen and disable the welcome screen.
- In the **Close** button’s **On Click** event, enable the settings screen and disable welcome screen.

**6.  Make the reset menu hide the settings menu when it appears:**

- In the **XR Origin (VR)** GameObject’s **On Button Press** component, add a new action that disables the settings screen.
- Enable the welcome screen and disable the settings screen.

![](https://connect-mediagw.unity.com/h1/20250923/learn/images/7b5edc79-e21a-48be-954b-eb548a196c76_SettingsPanel.png)

![](https://connect-mediagw.unity.com/h1/20250923/learn/images/5c3ebcba-b597-4008-a178-0836c61c85e5_SettingsPanel2.png)

You should now be able to access the Settings menu from a gear icon in the main menu, which has three placeholder toggle settings. You should also be able to return to the welcome panel from the settings by pressing a Close button.

## 4. Add a snap turning setting

One of the easiest ways to increase accessibility is allowing for more ways to navigate the environment. To do this, you’ll allow the user to enable or disable snap turning.

[Video](https://connect-mediagw.unity.com/h1/20250917/videos/afb0c156-68ca-4175-9286-fb0c9f87a1b7_3.1.4.mp4)

**1.  Replace the placeholder setting:**

- Edit the first setting text to “Snap Turning”.
- In the **Toggle** component, make sure the **Is On** property is enabled, since **Snap** **Turning** is enabled by default.

**2.  Link the toggle to the Snap Turn component:**

- In the **Toggle** component, for the **On Value Changed**  event, select the **Add** (**+**) button to add a new action.
- Assign the **Snap** **Turn** **Provider** to the **Object** slot, since it contains the **Snap** **Turn** **Provider** component.
- Open the **No Function** dropdown and select **GameObject** > **SetActive**.

**Note**: Make sure to select the **enabled** property that is a dynamic bool (boolean) - this means that it will be affected dynamically by the state of the toggle.

![](https://connect-mediagw.unity.com/h1/20250917/learn/images/7497396d-5392-4340-81d8-63565d699be3_SnapSetActive.png)

You should now have a functional check box that enables and disables snap turning.

## 5. Add a distance grab setting

Another setting that can drastically improve accessibility is the ability to grab GameObjects at a distance using the **NearFarInteractor**.

**1.  Set how the toggle should appear by default:**

- In the **Toggle** component, enable or disable the **Is On** property depending on whether you want distance grabbing enabled by default.
- Change the text on the toggle to "Distance Grab" to make the setting clear to users.

**2. Ensure your GameObjects are grabbable:**

- On each GameObject with an **XR** **Grab** **Interactable** component, confirm that the **Interaction** **Layer** **Mask** includes the **Default** layer so they can be grabbed.

**3. Assign your NearFarInteractor:**

- In the **Hierarchy** window, select the GameObject that contains the **Near-Far Interactor** component (often part of the hand/controller setup).
- Attach the **ToggleNearFarAttach** script to a GameObject (for example, the same one or an organizer GameObject).
- In the script’s **Near** **Far** **Interactor** box, drag in the **NearFarInteractor** reference.

**4. Link the Distance Grab toggle to switch modes:**

- In the **Toggle** component, in the **On** **Value** **Changed** property, select the **Add** (**+**) button to add a new action.
- Assign the GameObject that holds the **ToggleNearFarAttach** script to the **Object** box.
- Open the **No** **Function** dropdown and select **ToggleNearFarAttach** > **SetFarAttachMode**.
- Make sure to select the version under **Dynamic** **bool** so the toggle’s value gets passed in.

You should now have a toggle that enables and disables the ability to grab GameObjects with rays from a distance.

## 6. Recap

[Video](https://connect-mediagw.unity.com/h1/20210319/videos/80c2c233-a038-4ed9-9433-b553dd10afb8_3_1_recap_v1.mp4) ([Transcript (en)](https://connect-mediagw.unity.com/h1/20210402/9aa5a9cf-1ad2-4909-979b-ed05b9ffcc26_3_1_recap_v1.vtt))

**New functionality:**

- Fade in from black
- Teleportation fading
- Settings menu

**New concepts and skills:**

- VR comfort
- VR accessibility

**Next lesson:**

- Optimization

## 7. Extension Activities _(Optional)_

If you want to further develop your skills, explore new concepts, and improve your project, check out some of the optional extension activities below.

Each one is tagged as \[Easy\], \[Medium\], \[Difficult\], or \[Expert\] and will also include a \[Requires Programming\] tag if some coding is required.

**1.  Add voiceover narration \[Easy\]**

Add audio narration that plays at the start of your scene, reading the text on the main menu:

- Use the **OnSceneLoad** script to trigger this.

[Video](https://connect-mediagw.unity.com/h1/20210212/videos/a2af545d-ff3d-4dda-8be6-9028af6fae2d_3.1.ext___Voiceover.mp4)

**2.  Add a closed captions setting \[Medium\]**

Add closed captions to improve audio accessibility:

- For ambient sound like the fireplace, add closed captions to indicate what the sound is at the sound’s location.
- **Bonus**: Have the closed caption “billboard” towards the user, so that it’s always facing towards the user and is therefore always readable (use the **LookAtPlayer** script from the **\_Course Library** > **Scripts** > **Actions** folder or write your own script).
- **Bonus:** For your TV, use a video with words in it and add closed captions that go along with the words of the video (the Unity-shape-the-world video provided has voiceover) \[Requires programming\].

[Video](https://connect-mediagw.unity.com/h1/20210212/videos/f1206b7d-904e-46aa-a950-b3b754541aa7_3.1.ext___Closed_captions.mp4)

**3.  Add a continuous movement setting \[Medium\]**

Add a setting to toggle on and off continuous movement:

- Use the same technique you did to toggle snap turning.
- You will need to add a **Continuous** **Move** **Provider** component and a **Continuous** **Turn** **Provider** component to the **XR** **Rig**.
- **Bonus:** You could have a single toggle or dropdown that alternates between (a) continuous movement and turning vs (b) snap turning and teleporting.

[Video](https://connect-mediagw.unity.com/h1/20210212/videos/1dbca962-6508-40f9-a9ac-8c8528ab579c_3.1.ext___Continuous_movement.mp4)
