无头模式与平台细节
有些场景不需要窗口:服务器、批处理工具、自动化测试。Bevy 的无头模式通过 WindowPlugin 配置实现。
rust
use bevy::prelude::*;
use bevy::window::{ExitCondition, WindowPlugin};
fn main() {
App::new()
.add_plugins(DefaultPlugins.set(WindowPlugin {
primary_window: None,
exit_condition: ExitCondition::DontExit,
..default()
}))
.add_systems(Startup, setup)
.add_systems(Update, tick)
.run();
}
fn setup() {
info!("无头模式——没有窗口,纯逻辑运行");
}
fn tick(mut frame: Local<u32>, mut exit: MessageWriter<AppExit>) {
*frame += 1;
let f = *frame;
if f % 60 == 0 {
info!("逻辑帧 {}", f);
}
if f >= 300 {
info!("300 帧后自行退出");
exit.write(AppExit::Success);
}
}Listing 35-5:无头模式——没有窗口的纯逻辑运行
无头模式配置
rust
WindowPlugin {
primary_window: None, // 不创建主窗口
exit_condition: ExitCondition::DontExit, // 不因无窗口而退出
..default()
}ExitCondition 有三个变体:
| 变体 | 行为 |
|---|---|
OnAllClosed | 所有窗口关闭时退出(默认) |
OnPrimaryClosed | 主窗口关闭时退出 |
DontExit | 不自动退出,需要手动发送 AppExit |
无头模式下,渲染系统仍然运行但不会输出到屏幕。如果你连渲染都不需要,可以用 MinimalPlugins 替代 DefaultPlugins。
bevy_a11y:无障碍概述
bevy_a11y 提供了无障碍支持的基础设施:
AccessibilityPlugin:自动为 UI 元素生成无障碍树accesskit集成:通过平台原生的无障碍 API(Windows UI Automation、macOS Accessibility 等)暴露信息- 支持屏幕阅读器、键盘导航等
无障碍功能由 DefaultPlugins 自动启用。如果你的 UI 使用了 Bevy 的 Text、Button 等组件,它们会自动被无障碍系统识别。
bevy_platform 与 no_std 概述
bevy_platform 是一个底层工具 crate,提供:
- 平台抽象:
Instant、Duration、thread等跨平台封装 no_std兼容:在没有标准库的环境(嵌入式、WASM 等)下提供替代实现- 同步原语:
Mutex、RwLock、OnceLock等
对于大多数应用,你不需要直接使用 bevy_platform。它主要供 Bevy 内部 crate 使用。但了解它的存在有助于理解 Bevy 如何做到跨平台编译。