Введение в модуль доступности
Доступность означает создание интерфейса, который могут использовать люди с ограниченными возможностями. Это включает людей, которые полагаются на вспомогательные технологии, такие как экранные читатели, а также тех, кто использует системные настройки, такие как увеличенный текст или закрытые субтитры. Сведения о категориях инвалидности, вспомогательных технологиях и о том, почему доступность важна, см. в Концепции доступности.
Модуль Accessibility Unity позволяет играм и приложениям взаимодействовать со встроенными средствами чтения с экрана и реагировать на системные настройки специальных возможностей на устройстве пользователя. Этот модуль помогает сделать визуальные интерфейсы доступными для всех.
Модуль доступности включён по умолчанию. Если он не включён в вашем проекте, вы можете включить его через Package Manager.
Поддержка нативного экранного читателя
Основные мобильные и настольные операционные системы имеют встроенные экранные читатели.
В следующей таблице перечислены платформы и средства чтения экрана, поддерживаемые модулем доступности:
| Платформа | Считыватели экрана |
|---|---|
| Android | TalkBack |
| iOS | VoiceOver |
| Windows | Диктор |
| macOS | VoiceOver |
Вы создаете метаданные доступности, которые читатели экрана понимают, и модуль автоматически обрабатывает перевод для конкретной платформы.
Основные возможности
Модуль доступности позволяет:
- Создание удобных для навигации интерфейсов для пользователей экранных читателей
- Предоставление текстовых альтернатив визуальному контенту
- Определение семантических ролей, таких как кнопка, ползунок, заголовок и изображение
- Показ интерактивных состояний, таких как отключенное, выбранное и развернутое
- Уведомление экранных читателей об изменениях динамического содержимого
- Обработка уведомлений о действиях пользователя с помощью экранного читателя
- Работа вместе с любой UI системы, включая Unity UI и пользовательские UI фреймворки
- Добавить поддержку экранного чтения для любых игровых объектов в мире 2D или 3D
Примечание: Поскольку модуль доступности использует нативный APIs, ожидаемое поведение модуля APIs зависит от платформы, версии операционной системы и программы для чтения экрана. Всегда тестируйте приложение с помощью целевых программ для чтения экрана.
Ограничения
Модуль доступности имеет следующие ограничения:
- Он поддерживает только экранные читатели, перечисленные выше. Он не охватывает другие экранные читатели или вспомогательные технологии.
- Он не выводит иерархию доступности из вашей сцены или UI автоматически. Вы должны создать и обновить иерархию доступности, чтобы соответствовать элементам, которые вы хотите показать экранным читателям.
- Он не знает ни сцены, ни иерархии UI. Вы должны синхронизировать данные доступности с визуальными элементами в вашем собственном коде.
- Из-за различий между платформой APIs, некоторые модули доступности APIs имеют ограничения, специфичные для платформы. Эти ограничения описаны в документации модуля доступности API.
Технический обзор
Используйте AssistiveSupport API для включения поддержки программ чтения с экрана в вашем приложении. Этот класс хранит созданную вами иерархию доступности, позволяет приложению уведомлять программу чтения с экрана об изменениях интерфейса и уведомляет приложение о событиях, вызванных действиями пользователя.
Модуль доступности использует узловую иерархию AccessibilityHierarchy, отдельную от иерархии GameObject. Вы создаете экземпляры AccessibilityNode, которые представляют визуальные элементы вашего интерфейса и игрового мира. У каждого узла есть свойства, задающие его метку, значение, роль, состояние и связи с другими узлами.
Your active Unity scene (visual) AssistiveSupport (semantic)
└── Canvas (uGUI) / UI Document (UI Toolkit) └── AccessibilityHierarchy
└── Button └── AccessibilityNode
└── Text: "Start Game" ├── Label: "Start Game"
└── Role: Button
Вы можете использовать Доступность Hierarchy (меню: Окно > Доступность > Доступность Hierarchy) во время режима воспроизведения для просмотра вашей активной иерархии доступности в реальном времени.
Перевод платформы
Когда вы устанавливаете роль узла, модуль Доступности переводит ее на соответствующий нативный API:
| Платформа | Родной API | Представление узла |
|---|---|---|
| Android | android.view.accessibility | AccessibilityNodeInfo с className = "android.widget.Button" |
| iOS | UIAccessibility | UIAccessibilityElement с accessibilityTraits = UIAccessibilityTraitButton |
| Windows | UI Автоматизация | IRawElementProviderSimple с ControlType = UIA_ButtonControlTypeId |
| macOS | NSAccessibility | NSAccessibilityElement с accessibilityRole = NSAccessibilityButtonRole |
Поток событий
Следующая диаграмма иллюстрирует поток событий между пользователем экранного читателя, операционной системой, модулем доступности Unity и вашим приложением, когда пользователь взаимодействует с кнопкой доступности в вашем 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
Поддерживаемые UI элементы
Модуль доступности поддерживает многие общие UI элементы, включая следующие элементы с их ожидаемыми свойствами и событиями:
Настройки доступности системы
Используйте AccessibilitySettings API для получения и прослушивания обновлений в настройках масштабирования шрифта, жирного текста и закрытых субтитров на устройстве пользователя и соответствующей настройки UI и игрового процесса. Это улучшает удобство использования для людей с нарушениями зрения, слуха и когнитивных функций, а также для пользователей в шумных или тихих средах или тех, чьи нативный язык отличается от языка вашей игры или приложения.
Настройки доступности APIs доступны для Android и iOS.
Дополнительные ресурсы
- 📚 Документация: Модуль доступности API ссылка
- Сообщество: Поддержка мобильных экранных считывателей в Unity
- Сообщество: Поддержка настольного экранного читателя в Unity
- 📺 Видео: Охват новых аудиторий с помощью доступности и локализации в Unity 6 (Unite 2025)
- ⚙️ Образец проекта: LetterSpell: пример доступного Unity применение
- Сообщество: Unity Дискуссии: Доступность