bevy-a11y について
Bevy のゲーム開発者向けに、入力、UI、音声、カメラ、テストのアクセシビリティ設計を扱うスキルです。ゲーム向け指針、WCAG、プラットフォーム要件を参照し、障害のあるプレイヤーによるテストと証拠の記録を重視します。
主な機能
- 01入力の再割り当てと複数デバイス対応
- 02ポインター不要のUI操作とセマンティクス
- 03字幕、音声解説、視覚的な合図
- 04動き、点滅、カメラ効果の調整
- 05入力、コントラスト、字幕の監査スクリプト
- 06障害のあるプレイヤーによるテストと修正記録
活用シーン
- 01設計段階でゲームのアクセシビリティ要件を確認
- 02カスタム Bevy UI のフォーカスとスクリーンリーダー対応を計画
- 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、オーディオ、カメラ、ナラティブ、マルチプレイヤー、セーブシステムの設計段階から取り組みましょう。ラベルや字幕だけを後付けしても、アクセシブルでないゲームメカニクスは解決できません。
作業の基準
次の4つの層すべてを活用してください。
- ゲーム固有のエンジニアリング基準として、公開されている Xbox Accessibility Guidelinesを使用します。
- ゲームのUI/コンテンツに意味のある形で適用できる範囲でAAAを目指し、 WCAG 2.2の達成基準を使用します。
- 出荷するすべての対象プラットフォームについて、プラットフォームホルダーの要件と認定ガイダンスを確認します。
- 障害のあるプレイヤーが自身の支援技術を使って行うユーザビリティテストを実施します。
WCAG AAAは、ネイティブゲームに一律に適用される認定基準ではなく、自動チェックだけでは適合性を立証できません。対象範囲、例外、デバイス、テストビルド、調査結果、修正の証拠を記録してください。要件を参照してください。
まず出荷する基盤
- ゲームプレイとUIのすべての操作はデバイスに依存せず、再割り当て可能で、競合をチェックでき、保存可能であり、ポインターなしでメニューから利用できます。
- 入力は、ホットプラグ、複数デバイスの同時使用、プレイヤー1人あたり複数のコントローラー、未知のコントロール、調整可能なデッドゾーン/感度、デジタルによるアナログ操作の代替をサポートします。
- 長押し、連打、同時押し、素早いタイミング入力、精密な入力には、切り替え、タイミング調整、またはアシストによる代替手段があります。
- 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")],
));
}
フォーカス、ホバー、ポインターキャプチャ、スクリーンリーダーのフォーカスは、関連していますが同じものではありません。キーボード、D-pad/スティック、スイッチ式スキャン、タッチ、ポインター、実際のスクリーンリーダーを使ってテストしてください。カスタムウィジェットには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の場合、ネイティブの検出にはgamepadだけでなく、Bevyのbevy_gilrs機能が必要です。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— スケジュールのアーキテクチャ。