Native desktop screen reader support now available in Unity 6.3!

Hi everyone,

We’re excited to announce that Unity 6000.3.0a5 brings native screen reader support to Windows and macOS. This extends the platform coverage of Unity’s screen reader support APIs beyond Android and iOS (introduced in Unity 6.0), making it possible for you to build apps and games that are accessible to screen readers across all major platforms supported by Unity.

With this release, you can now make your Unity apps and games compatible with Narrator (Windows) and VoiceOver (macOS) – in addition to TalkBack (Android) and VoiceOver (iOS) – using a single set of APIs.

Accessibility is an essential part of app and game development, and this release significantly lowers the barrier to delivering more inclusive experiences. Where previously implementing screen reader accessibility required extensive native plugins or complex, platform-specific workarounds, Unity now provides first-class, cross-platform APIs that make it easier than ever to support screen readers in your project.

This release also adds new accessibility APIs – to support screen reader scrolling and more accessibility roles – and improves the behavior and consistency of existing APIs across platforms.

We’ve also greatly improved the scripting API documentation of the Accessibility module, drawing from the questions and feedback raised by you on this forum. The documentation now includes explanations of what each API is meant for, guidance on how and when to use them, and descriptions of the expected screen reader behavior across different platforms.

What’s new in Unity 6.3

  • Extended platform support
    • Extended the screen reader support APIs to Windows and macOS, enabling compatibility of Unity applications with Narrator and VoiceOver.
  • Screen reader scrolling support
    • Added scrolling support for TalkBack (Android), VoiceOver (iOS), and Narrator (Windows).
  • New accessibility roles
    • Added screen reader support for container views, dropdown lists, tab buttons, and text fields.
  • Other API additions and improvements

Learn more

Unite 2025 session

I shared more details about the Accessibility APIs at Unite 2025, on November 19-20 in Barcelona. If you could not attend, watch the session recording here: “Reach new audiences with Accessibility and Localization in Unity 6”.

Grateful for your feedback

We’re looking forward to seeing how you use these APIs to make your digital experiences accessible to more people. If you have feedback, please share it here – we want to hear from you!

25 Likes

Great to see more accessibility support! While not directly related to screen readers, I still believe this feature would be a great addition to creating clearer and responsive applications: support for changing OS cursor states, like changing to the hand pointer with hovering over buttons, the text selection when hovering over text, etc. You can do this using custom textures, but not only is that very tedious, it also does not respect the user’s chosen cursor, which can decrease accessibility if they use some special cursor that makes it easier to see.
The editor already does this, and you can set the cursor state for visual elements in UI Toolkit, but it’s not supported at runtime, which is a shame.

Huge congrats to the team! This is amazing :clap: :clap: :clap:

I didn’t knew this was going to be implemented so soon, can’t wait to see this kind of accessibility feature widespread :slight_smile:

Is Windows 10 supported? It seems like assigning anything to AssistiveSupport.activeHierarchy while the Narrator is enabled causes a native crash. No crash on Windows 11.

Unity version: 6000.3.0a5, 6000.3.0b8.
Scripting backend: Mono, IL2CPP

Minimal code to reproduce in an empty project (I also tried delaying the initialization by a frame or a couple of seconds):

using UnityEngine;
using UnityEngine.Accessibility;

public class AccessibilityManager : MonoBehaviour
{
    private void Start()
    {
        if (AssistiveSupport.isScreenReaderEnabled)
        {
            AccessibilityHierarchy hierarchy = new();
            AssistiveSupport.activeHierarchy = hierarchy;
        }
    }
}

There is nothing in Player.log. What I managed to find through debugging:

Exception code: 0xc0000409 STATUS_STACK_BUFFER_OVERRUN
In module: ucrtbase.dll
Call stack:
>	ucrtbase.dll!00007ff907aa286e()
 	ucrtbase.dll!00007ff907a786dd()
 	ucrtbase.dll!00007ff907a45a0c()
 	UIAutomationCore.dll!00007ff8c9323bcb()
 	UIAutomationCore.dll!00007ff8c92ebaa1()
 	UIAutomationCore.dll!00007ff8c92eb9ea()
 	UIAutomationCore.dll!00007ff8c92eb82b()
 	UnityPlayer.dll!00007fffec0e8286()
 	0000029eea00f74a()
 	0000029eea00f68b()
 	0000029eea00f469()
 	0000029eea00ee0b()
 	0000029eea00e853()
 	0000029eea01ffd3()
 	0000029ee8e65ed8()
 	mono-2.0-bdwgc.dll!00007fffeae06e7e()
 	mono-2.0-bdwgc.dll!00007fffead48874()
 	mono-2.0-bdwgc.dll!00007fffead48960()
 	UnityPlayer.dll!00007fffebd52a69()
 	UnityPlayer.dll!00007fffebd46289()
 	UnityPlayer.dll!00007fffebd46a65()
 	UnityPlayer.dll!00007fffebd47d4f()
 	UnityPlayer.dll!00007fffeb9b39d3()
 	UnityPlayer.dll!00007fffebb81b7d()
 	UnityPlayer.dll!00007fffebb81d44()
 	UnityPlayer.dll!00007fffebb821be()
 	UnityPlayer.dll!00007fffebdd78a4()
 	UnityPlayer.dll!00007fffebdd9e2d()
 	UnityPlayer.dll!00007fffebddcc79()
 	UnityPlayer.dll!00007fffebddcefb()
 	AccessibilityTesting.exe!00007ff73c7011f2()
 	kernel32.dll!00007ff908f97374()
 	ntdll.dll!00007ff909efcc91()

Should I report an issue or is this by design?

Hi SirGregory,

Thank you for reaching out!

Yes, Windows 10 supported. This is definitely an issue. Please report it, and we will address it as soon as we can.

Hi, and thank you for these promising accessibility updates.
Sadly I cannot make them work. I’m on windows 11, running Unity 6000.3 beta, and my project is for a windows game, not android nor ios. I enabled the accessibility module from within the Package manager. I couldn’t find the AccessibilityNode component when looking into the search bar of the Add Component. Am I missing something?
Thx in advance :slight_smile:

1 Like

Hi Dana,

At this moment, this feature is only available as a scripting API. It does not include components.

However, I do recommend checking out our sample project, LetterSpell, for an example of writing custom components which connect to the API.

1 Like

Hi Bianca!

I reported this bug a while ago, which you may already know. I have another question:

Is AccessibilityNode.decremented supported on Windows? I was able to get AccessibilityNode.incremented working, it uses the same keyboard shortcut as invoke (Caps Lock + Enter). I was not able to find any way to trigger AccessibilityNode.decremented event though.

1 Like

Hi SirGregory,

Thank you for reporting the bug!

Both AccessibilityNode.incremented and AccessibilityNode.decremented are supported on Windows. With Narrator, a slider can be adjusted with the left/right arrow keys (without any modifier keys).

For this to work, the slider has to receive both screen reader focus and keyboard focus. Since the Accessibility APIs are agnostic of the UI, if an AccessibilityNode gains screen reader focus, that doesn’t necessarily mean that its corresponding UI element gains keyboard focus. Thus, you might have to programmatically focus the UI element when its corresponding AccessibilityNode gains focus. This can be done by subscribing to AccessibilityNode.focusChanged.

Here is a simplified example for a UI Toolkit slider:

sliderNode.focusChanged += focused =>
{
    if (focused)
    {
        slider?.Focus();
    }
    else
    {
        slider?.Blur();
    }
};

I hope this helps!

1 Like

the slider has to receive both screen reader focus and keyboard focus .

Late reply, but the info about focusChanged is missing from the Unity v6.3 AccessibilityRole.Slider docs page. It’s included on the page for Text Input fields.

I dropped a “Page Missing Info” ticket, but just noting this here so it’ll hopefully make it into 6.4+ docs.

1 Like

Is the Public A11y Sample build to Windows expected to work with Narrator?
My Narrator is identifying the game window, but not continuing through to buttons.

Looks like the main branch is still on Unity 2023.3, so that’d be mobile-only. You might try peeking at the not-quite-published versions they did for last year’s Unite talk - those branches seem to be built against a 6.3 beta. So they’ll probably be wonky, but it’s a start at least.

You can always check a Unity project’s version under {ProjectFolder}/ProjectSettings/ProjectVersion.txt. Saves a lot of hairpulling LOL

Hi @SirGregory,

I wanted to take a minute and let you know that I’ve fixed the bug causing the crash on Windows 10. The fix will be available within the versions mentioned in the bug report in the Issue Tracker.

Thank you again for bringing this to our attention!

Hi @mandisaw,

Thank you for pointing out the missing information. I’ve added it to the documentation for AccessibilityRole.Slider.

1 Like

I’m also really happy to share something we’ve been working toward for a while: the Unity Manual now has a dedicated Accessibility section!

These pages were designed and written with one goal in mind: making it easier for developers and accessibility experts alike to find the information they need on this important topic.

Inside, you’ll find an introduction to the Accessibility module, a getting-started guide to screen reader support, a look at the module’s architecture and performance, and explanations of the core accessibility concepts behind it all.

Have a look and please let us know what’s helpful and what’s missing – your feedback genuinely shapes where these docs go next. :rocket:

For a deeper dive, I gave a talk at GAconf Europe 2026 – The Shadow Interface and Screen Readers – on how operating systems provide the infrastructure (“the shadow interface”) for screen readers and how Unity bridges the Engine to the platform-level accessibility APIs – a good companion to these docs whether or not you’ve ever used a screen reader.