用途
bevy-genre-simulation 是一个“类型路由器”(genre router),用于在 Bevy 0.20 中搭建模拟类玩法。它不承载具体领域实现,领域工作由其他 Bevy 技能完成。当你的项目需要智能体(agents)、资源(resources)以及一个可步进的时钟(clock)时,加载本技能。
主要能力与 ECS 形态
- 组件(Component)以纯数据形式保存该类型下每个实体的标志位;本文件不命名新的引擎类型。
- 资源(Resource)通过 bevy-data-resources 保存全局计数器(分数、波次索引、随机种子等)。
- 系统(System)在 Update 或来自 bevy-master 的固定时间步上读取这些组件;当后续系统必须看到前一个系统的结果时,用 .chain() 排序。
- 调度:玩法模式切换走 bevy-state-machines,不要自行发明类型插件。
路由
- bevy-economy-system —— 库存(Stocks)。
- bevy-ai-navigation —— 智能体策略(Agent policy)。
- bevy-data-resources —— 模拟数据表(Sim tables)。
- bevy-state-machines —— 暂停(Pause)。
范围
需求(Needs)、工作(Jobs)和模拟小时(sim hour)是组件加一个时钟资源。暂停是该时钟上的一个布尔值。
使用方式(示例要点)
依赖声明为 Bevy 0.20:
[package]
name = "simulation"
version = "0.1.0"
edition = "2021"
[dependencies]
bevy = "0.20"
时钟是模拟小时的唯一写入者。饥饿与食物在下一个系统中变化,以便它们看到同一个暂停标志。示例定义了 SimClock 资源(hour、paused)、Hunger 组件(value)、Pantry 组件(food),以及 advance_clock、eat、toggle_pause 三个系统,并在 SimPlugin 中通过 insert_resource 插入时钟,再用 add_systems(FixedUpdate, (toggle_pause, advance_clock, eat).chain()) 注册。
工作(Job)是智能体上的目标库存,工作从共享仓库资源转移到该库存。示例定义了 Job 组件(rate、held、capacity)、Depot 资源(timber)以及 work 系统。
启动时插入时钟、仓库和两个智能体:spawn_town 系统通过 Commands 插入 SimClock(hour 8.0、paused false)与 Depot(timber 40.0),并生成两个带有 Hunger、Pantry、Job 的实体。
专家知识要点
目标为 Bevy 0.20+。核心 ECS 类型包括 Component、Resource、Query、Commands、Startup、Update、Fixed / FixedMain(bevy::time)、.chain()、Plugin、DefaultPlugins、MinimalPlugins。消息与观察者属于归属槽位,其 API 见 bevy-events-messaging。除非 .chain() 对冲突系统排序,否则系统并行运行。
状态归属:单个实体上的数据由 Component 承载,一个系统通过 Query 修改,运行在 Update 或 FixedMain;整个应用的一个值由 Resource 承载,一个系统修改,Startup 插入后由读取它的调度使用;生成由 Commands 负责,Startup 用于初始世界,后续调度用于运行时生成;不能竞态的顺序由 .chain() 保证,仅限被链式的系统,且在同一调度内;插件边界由 Plugin 负责,build 在应用运行前注册系统与资源。
借用规则:两个系统若都可变查询同一组件,必须排序(.chain())或拆分,使只有一个写入者;无关系统保持并行。
决策表:按实体数据用 Component + Query,不要用场景树脚本;应用级配置或时钟用 Resource,不要把值复制到每个实体;稳定模拟步用 FixedMain 与 Fixed 时钟,不要把模拟绑定到原始帧 Update;启动生成用 Startup 中的 Commands,不要从渲染系统生成;非共享状态的跨系统通知用 bevy-events-messaging 中的消息或观察者槽位,不要在本文件发明新事件类型;步进的模拟小时用 FixedUpdate 上的 SimClock,需求放在智能体上,不要每帧把小时复制到每个实体。
限制与禁止事项
- 不要在文档 URL 中固定 /0.20.0/,链接保持指向最新版本,0.20 目标只在正文中声明一次。
- 不要从两个未排序的系统可变查询同一组件。
- 不要在此发明物理、导航、网络或 XR crate。
- Bevy 代码中不要使用场景树类型。
- 不要发明类型 API。
- 不要在此选择物理或网络 crate。
参考与相关技能
bevy-master 的库固定版本保持 0.20.0,官方链接保持指向无版本号的 learn 页面。官方文档涵盖 Assets、Examples、ECS、Plugins。前置技能:bevy-master(ECS 归属与调度)、bevy-ecs-composition(生成与查询形态)。互补技能:bevy-economy-system、bevy-ai-navigation、bevy-data-resources、bevy-state-machines。下游消费者:无,本路由器不拥有第二套实现。主技能:bevy-master。
暂未提供
资料未提供收费、价格、平台、效果或具体使用步骤之外的额外信息。