Documentation

Unity Engine


User Manual

Script Reference

Unity Engine


Introduction to the Accessibility module

Learn about Unity's Accessibility module, its purpose, capabilities, and platform support.
Read time 4 minutesLast updated 12 days ago

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

AndroidTalkBack
iOSVoiceOver
WindowsNarrator
macOSVoiceOver
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 scene 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 elements 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

Androidandroid.view.accessibility
AccessibilityNodeInfo
with
className
=
"android.widget.Button"
iOSUIAccessibility
UIAccessibilityElement
with
accessibilityTraits
=
UIAccessibilityTraitButton
WindowsUI Automation
IRawElementProviderSimple
with
ControlType
=
UIA_ButtonControlTypeId
macOSNSAccessibility
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:

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