用途
Bevy Horror 是一个恐怖游戏类型的“薄路由”(thin router)技能,目标版本为 Bevy 0.20+。它不实现完整的恐怖玩法,而是把该类型中属于本技能负责的数据与系统集中起来,并把其他领域工作路由到关联技能。
主要能力
本技能负责三类 ECS 数据:
- 理智值(Sanity):作为组件挂在实体上,通过资源 SanityDrain 控制消耗速率,在 FixedUpdate 中按时间递减。
- 追踪者怀疑度(Stalker):组件包含 suspicion 与 sees_player 字段,看到玩家时上升、否则缓慢下降。
- 光源能量(LightCell):组件持有 energy,在 FixedUpdate 中按时间消耗。
组件只保存该类型的每实体标志,作为普通数据;资源保存全局计数器(如分数、波次索引、随机种子),通过 bevy-data-resources 管理。系统在 Update 或来自 bevy-master 的固定时间步上读取这些组件,需要顺序时用 .chain() 排序。游戏模式切换通过 bevy-state-machines 处理,本文件只注册理智、怀疑和光照系统。
使用方式
依赖声明为 bevy = "0.20"。示例代码定义了 Sanity、Stalker、LightCell 组件,以及 SanityDrain 资源,并分别通过 SanityPlugin、StalkerPlugin、HorrorSetupPlugin 注册系统。spawn_player 在 Startup 中生成带有 Sanity 和 LightCell 的玩家实体。
ECS 所有权规则:单实体数据用 Component + Query;全局配置或时钟用 Resource;稳定模拟步用 FixedMain 与 Fixed 时钟;启动生成用 Startup 中的 Commands;跨系统通知(非共享状态)使用 bevy-events-messaging 中的消息或观察者槽位。两个同时可变查询同一组件的系统必须用 .chain() 排序或拆分,否则会并行运行产生冲突。
路由关系
- bevy-3d-lighting:黑暗效果
- bevy-audio-systems:惊吓音效(stingers)
- bevy-ai-navigation:追踪者策略与寻路
- bevy-mechanic-secrets:剧情标志(lore flags)
前置技能为 bevy-master(ECS 所有权与调度)和 bevy-ecs-composition(生成与查询形态)。
适用场景
适合在 Bevy 0.20 项目中搭建恐怖类型玩法数据层,需要把理智、怀疑、光源能量作为 ECS 组件与资源来组织,并希望将黑暗、音效、寻路等实现交给对应技能时使用。
限制
本技能是路由,不拥有第二套实现。不得在文档 URL 中固定 /0.20.0/ 版本;不得从两个无序系统可变查询同一组件;不得在此发明物理、导航、网络或 XR crate;不得在原始 Update 上消耗理智(恐惧与光源能量属于模拟,应放在 FixedUpdate);不得发明类型 API,代码保持惯用 ECS 并只使用有文档的 Bevy API。官方文档链接保持无版本站点。