Version: Unity 6.6 Alpha (6000.6)
Language : English
Accessibility
Get started with screen reader support

Introduction to the Accessibility module

Accessibility means designing experiences that people with disabilities can use. This includes people who rely on assistive technologies such as screen readers, as well as those who use system settings such as large text or closed captions. For background on disability categories, assistive technologies, and why accessibility matters, refer to Accessibility concepts.

The Unity Accessibility module enables games and applications to communicate with native screen readers and respond to the system accessibility settings on the user’s device. This module helps you transform visual interfaces into experiences that everyone can use.

The Accessibility module is enabled by default. If it is not enabled in your project, you can enable it through the Package Manager.

Native screen reader support

The major mobile and desktop operating systems have built-in screen readers.

The following table lists the platforms and screen readers that the Accessibility module supports:

Platform Screen reader
Android TalkBack
iOS VoiceOver
Windows Narrator
macOS VoiceOver

You create accessibility metadata that screen readers understand, and the module handles the platform-specific translation automatically.

Core capabilities

The Accessibility module enables you to:

  • Create navigable interfaces for screen reader users
  • Provide text alternatives for visual content
  • Define semantic roles, such as button, slider, heading, and image
  • Expose interactive states, such as disabled, selected, and expanded
  • Notify screen readers of dynamic content changes
  • Handle screen reader notifications of user actions
  • Work alongside any UI system, including Unity UI and custom UI frameworks
  • Add screen reader support to any game objects in a 2D or 3D world

Note: Because the Accessibility module uses native APIs, the expected behavior of the module’s APIs depends on the platform, operating system version, and screen reader. Always test your application with the target screen readers.

Limitations

The Accessibility module has the following limitations:

  • It supports only the screen readers listed above. It does not cover other screen readers or assistive technologies.
  • It does not derive the accessibility hierarchy from your sceneA Scene contains the environments and menus of your game. Think of each unique Scene file as a unique level. In each Scene, you place your environments, obstacles, and decorations, essentially designing and building your game in pieces. More info
    See in Glossary
    or UI automatically. You must create and update the accessibility hierarchy to match what elements you want to expose to screen readers.
  • It has no awareness of the scene or UI hierarchy. You must synchronize accessibility data with the visual elementsA node of a visual tree that instantiates or derives from the C# VisualElement class. You can style the look, define the behaviour, and display it on screen as part of the UI. More info
    See in Glossary
    in your own code.
  • Due to differences among the platform-native APIs, certain Accessibility module APIs have platform-specific limitations. These are described in the Accessibility module API documentation.

Technical overview

Use the AssistiveSupport API to enable screen reader support for your application. This class stores the accessibility hierarchy that you create, allows your application to notify the screen reader of changes in your UI, and notifies your application of events based on user actions.

The Accessibility module uses a node-based AccessibilityHierarchy separate from the GameObject hierarchy. You create AccessibilityNode instances that represent visual elements in your UI and game world. Each node has properties that define its label, value, role, state, and relationships to other nodes.

Your active Unity scene (visual)                        AssistiveSupport (semantic)
└── Canvas (uGUI) / UI Document (UI Toolkit)            └── AccessibilityHierarchy
    └── Button                                              └── AccessibilityNode
        └── Text: "Start Game"                                  ├── Label: "Start Game"
                                                                └── Role: Button

You can use the Accessibility Hierarchy Viewer (menu: Window > Accessibility > Accessibility Hierarchy Viewer) during Play mode to view your active accessibility hierarchy in real-time.

Platform translation

When you set a node’s role, the Accessibility module translates it to the corresponding native API:

Platform Native API Native node representation
Android android.view.accessibility AccessibilityNodeInfo with className = "android.widget.Button"
iOS UIAccessibility UIAccessibilityElement with accessibilityTraits = UIAccessibilityTraitButton
Windows UI Automation IRawElementProviderSimple with ControlType = UIA_ButtonControlTypeId
macOS NSAccessibility NSAccessibilityElement with accessibilityRole = NSAccessibilityButtonRole

Event flow

The following diagram illustrates the flow of events between a screen reader user, the operating system, Unity’s Accessibility module, and your application when a user interacts with an accessible button in your UI:

The user activates the button with the screen reader
    → The operating system sends the activation event to Unity
        → Unity translates the event to AccessibilityNode.invoked
            → Your event handler invokes the click event on the button
                → The button responds normally

Supported UI elements

The Accessibility module supports many common UI elements, including the following elements with their expected properties and events:

Element Role Properties and events
Button AccessibilityRole.Button AccessibilityNode.invoked
Slider AccessibilityRole.Slider AccessibilityNode.value, AccessibilityNode.incremented, AccessibilityNode.decremented
ToggleA checkbox that allows the user to switch an option on or off. More info
See in Glossary
AccessibilityRole.Toggle AccessibilityState.Selected, AccessibilityState.None
Text input AccessibilityRole.TextField AccessibilityNode.value
Dropdown AccessibilityRole.Dropdown AccessibilityNode.value, AccessibilityState.Expanded, AccessibilityState.None, and child nodes for options

System accessibility settings

Use the AccessibilitySettings API to retrieve and listen to updates in the native font scaling, bold text, and closed captions settings on the user’s device, and adjust your UI and game experience accordingly. This improves usability for people with low vision, hearing impairments, and cognitive disabilities, as well as users in noisy or silent environments or those whose first language differs from the language of your game or application.

The accessibility settings APIs are available for Android and iOS.

Additional resources

Accessibility
Get started with screen reader support