SuperAPI AI 工具集

bevy-app-resources

编程与开发

查看项目

更新于 10-16 06:08

技能介绍

用途

本技能用于处理 Bevy 引擎中「全应用范围」的数据与逻辑。当某个数据或逻辑必须对整个应用存在时(例如唯一的时钟、唯一的规则集、启动时的实体生成,或一对必须按顺序执行的系统),就应加载本技能。它与 bevy-data-resources 配合使用,用于区分「组件还是资源」的取舍。

主要能力

  • App:App 包含一个 World 和外层循环。它初始化资源(仅一份副本),把系统加入 Schedule,并通过插件导入其他 App 的改动。
  • Resources:涉及 Resource、Res、ResMut 和 insert_resource。Time 资源由 add_plugins(DefaultPlugins) 提供。
  • Plugins:插件实现 Plugin trait,并在 build 中插入资源。DefaultPlugins 是添加 Time 的插件集合。
  • Schedules:add_systems(Startup, ...) 在其他系统之前运行一次;add_systems(Update, ...) 是重复运行的调度。.chain() 用于排序必须看到彼此写入的系统。
  • States:全应用模式属于 bevy::state,而非全局节点,参见 bevy-state-machines。

使用方式

文档给出「需求 → Bevy 惯用法」的对照:

  • 全应用只需一份副本 → 在 App 上插入的 Resource
  • 每帧运行的逻辑 → Update 上的系统(或链式的一对系统)
  • 启动设置 → Startup 系统,或在 Plugin 中 insert_resource
  • 一次性通知 → 消息或事件,参见 bevy-events-messaging

范围要点:在 Plugin::build 内用 insert_resource 插入全应用数据,或从 Startup 系统插入;用 .chain() 排序两个都会可变使用同一资源的系统;存档文件是你自己序列化的 Resource,运行中的副本留在 World 中。

文档提供了完整代码示例,包括 Cargo.toml 依赖(bevy = "0.20")、一个规则资源、一个启动生成、以及一对不得在 Score 上竞争的系统。示例展示了 RulesPlugin 在 build 中 insert_resource(Ruleset) 与 init_resource::<Score>(),并 add_systems(Startup, spawn_session) 与 add_systems(Update, (apply_gravity, award, publish).chain())。还给出第二个只读取规则资源的插件示例,以及读取 Time<Fixed> 并停留在 FixedUpdate 的固定步长模拟示例。

适用场景

  • 需要全应用共享的配置或时钟(如重力规则、计时器)
  • 启动时生成初始实体
  • 需要固定顺序、避免竞争的系统对
  • 需要稳定模拟步长(FixedMain 与 Fixed 时钟)

限制

  • 目标版本为 Bevy 0.20+。
  • 不要在文档 URL 中固定 /0.20.0/,链接保持最新,0.20 目标只在正文中说明一次。
  • 不要从两个无序系统可变查询同一组件,因为调度会并行运行系统,除非用 .chain() 排序。
  • 不要在本技能中发明物理、导航、网络或 XR crate,本技能只命名有文档的 Bevy crate 和模块。
  • 不要为应用数据使用进程级全局静态变量,App 上的 Resource 是唯一所有者,系统通过 Res 或 ResMut 借用。
  • 不要发明 DefaultPlugins 和 Plugin trait 之外的插件列表。
  • 不要使用第三方 crate。
  • 消息与观察者的 API 属于 bevy-events-messaging 的范畴。
  • 固定时间步长的时钟类型属于 bevy-character-movement。

相关技能

  • 前置:bevy-master(枢纽与调度)、bevy-project-foundations(crate 与 App::new())
  • 互补:bevy-data-resources(数据何时是组件而非资源)、bevy-state-machines(用于模式切换的全应用 States)
  • 下游:存档、音频和场景技能覆盖持久化、播放和场景生成
  • 主技能:bevy-master(Bevy 路由)