# Accessibility
Prompts that survive a rebind already live in [[Context-Sensitive Prompts and Onboarding]]. This series is the rest of a class-sized accessibility pass: **colorblind-safe palettes**, **subtitle scale**, **reduced motion**, and a **recap** of Input System remapping (not a rewrite of [[3. Runtime Rebinding]]). It also points at the official **Accessibility** module (screen readers, `AccessibilitySettings` on mobile) without pretending that module is a complete "accessibility mode" by itself.
**Target:** Unity **6000.5+**. Runtime settings should work on standalone and Quest; official `AccessibilitySettings` (font scale, bold text, closed captions) are documented as **Android and iPhonePlayer only** - always also ship an in-game toggle. For Quest, prefer **Unity 6.3 LTS (6000.3.27f2+)** and test on-device; do not assume mobile system settings exist on the headset.
> [!warning] Code not compiled
> `VisionUtility.GetColorBlindSafePalette` and `AccessibilitySettings` were checked against the Unity **6000.5** Scripting API and the Accessibility module intro. **No settings menu or palette script in this series has been compiled or play-tested in Unity or with a screen reader.**
> [!note] Verification status
> **Verified (6000.5, 2026-11-10):** `UnityEngine.Accessibility.VisionUtility.GetColorBlindSafePalette(Color[] palette, float minimumLuminance, float maximumLuminance)` returns the number of unambiguous colors (palette repeats if you ask for more); luminance 0-1, docs recommend ≥ 0.2 on dark backgrounds and ≤ 0.8 on light; colors aimed at normal vision, deuteranopia, protanopia, and tritanopia. `AccessibilitySettings.fontScale`, `isBoldTextEnabled`, `isClosedCaptioningEnabled` plus `fontScaleChanged`, `boldTextStatusChanged`, `closedCaptioningStatusChanged` - **read-only, Android and iPhonePlayer**. Accessibility module intro: native screen readers (Android TalkBack, iOS VoiceOver, Windows Narrator, macOS VoiceOver); you must build an `AccessibilityHierarchy` of `AccessibilityNode`s yourself; `AssistiveSupport` holds the active hierarchy; **Window > Accessibility > Accessibility Hierarchy Viewer** in Play Mode; module APIs depend on OS / screen reader - test on device. Input remapping: existing [[Input System]] / [[3. Runtime Rebinding]] / [[5. Worked Example Remappable Player]].
> **Not verified:** a documented cross-platform **OS reduced-motion** query in the 6000.5 Scripting API (this series uses an in-game toggle and does not invent `Application.reducedMotion`). Whether `AccessibilitySettings` works on Quest / XR; treat as unverified and rely on in-game settings. Full `AccessibilityNode` / role / state surface is only summarized - follow the module manual for a screen-reader implementation. No official "Unity colorblind post-effect" is cited; a Volume grade is optional makeup, not a substitute for distinguishable UI.
## Parts
| # | Note | Covers |
|---|---|---|
| 1 | [[1. Accessibility Mindset and the Module]] | Design rules, official module, what this series will not invent |
| 2 | [[2. Colorblind-Safe Palettes]] | `VisionUtility`, icons and patterns, not color-only |
| 3 | [[3. Subtitle Scale and Captions]] | In-game scale, `AccessibilitySettings` on mobile, Localization |
| 4 | [[4. Reduced Motion]] | Player toggle, Motion Blur, Impulse, flashes |
| 5 | [[5. Remapping Recap and Settings Menu]] | Input System recap and a single settings screen |
| 6 | [[6. Accessibility Pitfalls]] | Mobile-only APIs, screen readers, photosensitivity, Quest |
## Design lens (Level Up!)
Level 8 in [[Level Up! (Review)]]: **KYSS**, icon clarity, a clean HUD - if a state is only a hue, it fails this chapter. Level 7: remappable controls, action on button press. Level 9 / prompts: do not hard-code "Press E." Accessibility is how those rules survive a wider audience, not a sticker you add after ship.
## Patterns used (Game Programming Patterns)
- **Type Object / data** - an `AccessibilitySettingsAsset` or runtime settings object is data the HUD, camera, and audio observe.
- **Observer** - `fontScaleChanged`, a reduced-motion event, `InputSystem.onDeviceChange` already in the Input series; the menu does not poll every frame.
- **Command** - remaps stay Commands ([[Input System]]).
See [[Game Programming Patterns (Review)]].
## Related (existing)
- [[Context-Sensitive Prompts and Onboarding]] - glyphs and fallback text
- [[Input System]] / [[3. Runtime Rebinding]] / [[5. Worked Example Remappable Player]]
- [[UI Toolkit and Diegetic UI]] / [[3.HUD and Inventory Example]]
- [[Localization]] / [[2. Localizing UI Toolkit and uGUI Text]]
- [[Post-Processing]] / Motion Blur in the effect catalog
- [[Cinemachine 3]] / [[4.Impulse Noise and Extensions]]
- [[Combat Feel and Hit Feedback]] / [[5. Worked Example Fullscreen Flash]]
- [[High Scores, Saves and Player Stats]] / [[PlayerPrefs Advanced]]
- [[Level Up! (Review)]] Levels 7, 8
## Sources
- Accessibility module intro (6000.5): https://docs.unity.com/en-us/engine/6000.5/manual/accessibility/module-intro
- `VisionUtility.GetColorBlindSafePalette` (6000.5): https://docs.unity3d.com/6000.5/Documentation/ScriptReference/Accessibility.VisionUtility.GetColorBlindSafePalette.html
- `AccessibilitySettings` (6000.5): https://docs.unity3d.com/6000.5/Documentation/ScriptReference/Accessibility.AccessibilitySettings.html