关于 bevy-a11y
面向 Bevy 游戏开发者的无障碍设计技能,涵盖输入、界面、音频、镜头与测试。以游戏无障碍指南、WCAG 和平台要求为依据,并强调残障玩家实测及证据记录。
主要功能
- 01输入重映射与多设备支持
- 02无指针界面导航与语义
- 03字幕、音频描述及视觉提示
- 04动作、闪光与镜头效果控制
- 05输入、对比度和字幕审计脚本
- 06残障玩家测试与整改记录
适用场景
- 01在设计阶段检查游戏机制的无障碍需求
- 02为自定义 Bevy 界面规划焦点与屏幕阅读器支持
- 03发布前核验输入映射、对比度和字幕
- 04为平台审核整理测试结果与整改证据
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ chrisgliddon/ bevy-skills --skill bevy-a11y安装后在 Claude Code 中输入/bevy-a11y确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/captions-audio-communication.mdinput-and-adaptive-controllers.mdrequirements.mdscreen-readers-and-navigation.mdtesting-and-evidence.mdtooling.mdvisual-cognitive-motion.mdscripts/audit_input_map.pycheck_contrast.pyvalidate_captions.pytests/test_scripts.pytests/fixtures/contrast.jsonen-US.vttfr-FR.vttinput-map.json详细介绍
Bevy 0.19 — 游戏无障碍
无障碍是一项贯穿全局的产品要求。应从输入、UI、音频、摄像机、叙事、多人游戏和存档系统的设计阶段就开始考虑;仅在事后补上标签和字幕,无法解决游戏机制本身的无障碍问题。
工作标准
使用以下全部四个层面:
- 将 Xbox Accessibility Guidelines 作为面向公众的游戏专用工程基准。
- 参考 WCAG 2.2 标准,在适用于游戏 UI/内容的范围内以 AAA 级为目标。
- 满足每个发售平台的要求及认证指南。
- 邀请残障玩家使用自己的辅助技术进行可用性测试。
WCAG AAA 并非适用于所有原生游戏的通用认证,自动化检查也无法证明符合标准。请记录范围、例外情况、设备、测试版本、发现的问题以及修复证据。参见要求。
优先落实这些基础功能
- 所有游戏玩法和 UI 操作均不依赖特定设备、可重新映射、经过冲突检查、可持久保存,并且无需指针即可通过菜单访问。
- 输入支持热插拔、同时使用多个设备、每位玩家使用多个控制器、未知控件、可调节的死区/灵敏度,以及数字输入的模拟替代方案。
- 按住、重复按键、组合键、快速时序和精确输入均提供切换、时序调整或辅助选项。
- UI 具有确定的焦点顺序、可见焦点、语义角色/名称/状态、可缩放的文本/布局、足够的对比度,并且不只通过颜色传达信息。
- 对话和有意义的音频提供同步隐藏字幕;有意义的视觉事件提供旁白/音频描述或同等提示。
- 为摄像机抖动、动态模糊、闪光、自动运动及其他影响前庭系统/光敏性的效果设置安全默认值,或提供独立控制选项。
- 无障碍设置在首次开始游戏前即可使用,并且在重新映射按键、更改语言、断开连接和迁移存档后仍可正常使用。
Bevy UI 语义和焦点
DefaultPlugins 包含 InputFocusPlugin。请显式添加导航插件,并将无障碍名称设置在与交互控件相同的实体上:
use bevy::{
input_focus::{
directional_navigation::DirectionalNavigationPlugin,
tab_navigation::TabNavigationPlugin,
},
prelude::*,
ui::auto_directional_navigation::AutoDirectionalNavigation,
};
fn main() {
App::new()
.add_plugins((
DefaultPlugins,
TabNavigationPlugin,
DirectionalNavigationPlugin,
))
.add_systems(Startup, setup)
.run();
}
fn setup(mut commands: Commands) {
commands.spawn(Camera2d);
commands.spawn((
Button,
AccessibleLabel::new("Start game"),
AutoDirectionalNavigation::default(),
children![Text::new("Start game")],
));
}
焦点、悬停、指针捕获和屏幕阅读器焦点彼此相关,但并不相同。请测试键盘、方向键/摇杆、开关式扫描、触摸、指针和真实的屏幕阅读器。自定义控件应使用 AccessKit 节点,并公开不断变化的值/状态,而不只是静态标签。参见屏幕阅读器和导航。
自适应控制器和无障碍控制器
自适应控制器通常通过标准游戏手柄/HID 映射接入。不要根据品牌、供应商 ID 或特定设备名称限制功能。应将每个 Gamepad 实体视为一组能力和绑定:
use bevy::prelude::*;
fn read_gamepads(gamepads: Query<(Entity, &Gamepad)>) {
for (entity, gamepad) in &gamepads {
let move_axis = gamepad.left_stick();
let activate = gamepad.just_pressed(GamepadButton::South);
let extra = gamepad.just_pressed(GamepadButton::Other(0));
let _sample = (entity, move_axis, activate, extra);
}
}
使用 default-features = false 时,原生设备发现需要 Bevy 的 bevy_gilrs 功能,而不仅仅是 gamepad。leafwing-input-manager 0.21 是兼容的可选操作层,但它不会替你创建无障碍设置、UI、持久化功能或游戏机制替代方案。参见输入和自适应控制器。
按访问需求划分的要求
| 领域 | 不可妥协的实现要求 |
|---|---|
| 盲人/低视力 | 语义化 UI、完整的非指针导航、语音朗读/音频描述、文本缩放、醒目的焦点/对比度、非颜色提示 |
| 失聪/听力障碍 | 带有说话者标识和有意义声音提示的隐藏式字幕、视觉/触觉替代方案、独立的混音控制 |
| 运动障碍 | 完整的按键重映射、同时使用多个设备、无需强制长按/连击/组合键、时机/瞄准/移动辅助、尽可能支持暂停 |
| 认知/学习障碍 | 一致的导航、通俗易懂的语言、目标历史记录、教程、可调节的节奏/难度、低干扰模式 |
| 言语/沟通障碍 | 不强制使用语音、无障碍文本聊天;在沟通为核心的场景中提供语音转文本/文本转语音 |
| 光敏/前庭障碍 | 闪烁安全、减少动态效果、震动/视野范围(FOV)/模糊控制、不依赖关键视差/自动运动 |
请阅读视觉、认知与动态效果和 字幕、音频与沟通。
实现关卡
- 在输入映射冻结前,对操作清单运行
scripts/audit_input_map.py。 - 对每个主题/状态组合运行
scripts/check_contrast.py;单独抽查图像/视频背景。 - 对源文件和本地化的 VTT/SRT 文件运行
scripts/validate_captions.py。 - 执行测试与证据中的手动测试矩阵。
- 在验证发布版本及受支持的输入/平台组合之前,不要宣传无障碍功能标签。
脚本格式和 CI 示例见工具。
另请参阅
bevy-input-actions— 逻辑操作、按键重映射、设备热插拔、Steam Deck 和自适应控制器集成。bevy-audio— 字幕/提示的边界、类别混音、空间音频的限制,以及浏览器音频启动。bevy-ui— 布局、文本、交互和焦点 API。bevy-cargo-features— 控制器和 UI 后端。bevy-fluent— 本地化文本和字幕。bevy-cameras— 震动、视野范围(FOV)和视口控制。bevy-physics— 基于物理构建的无障碍角色移动、瞄准和时机机制。bevy-testing— 确定性检查和录制证据。bevy-core-concepts— 调度架构。