用途
本技能用于在 Bevy 引擎中实现“秘密与发现标记”机制。当玩家发现可选的、需要持久保存的标记(flag)时,可以加载本技能作为参考。它聚焦于秘密 ID、已发现集合、注视检测和定时输入序列,这些都以组件和资源的形式由开发者自行定义。
主要能力
- 秘密 ID:作为世界对象上的一个组件。
- 已发现集合:作为一个保存 ID 的资源。
- 距离发现:当 Seeker 与 Secret 的距离小于等于其半径时,将秘密 ID 插入已发现集合。
- 注视发现:当 Seeker 朝向与指向秘密的方向点积大于 0.98 且距离在合理范围内时,将秘密 ID 插入已发现集合。
- 定时输入序列:维护一个滚动窗口,当输入尾部匹配预设模式(如经典的上上下下左右左右)且在窗口过期前完成时解锁。
- 按进度解锁:当已清除比例达到 80% 时解锁并插入指定 ID。
使用方式
技能提供示例代码,展示了组件(Secret、Seeker)、资源(Discovered、SequenceSecret、ProgressUnlock)以及系统(discover、look_at_secret、match_sequence、unlock_by_progress)的写法,并给出一个 SecretsPlugin 用于注册资源与系统。示例依赖 bevy = "0.20" 与 serde。
ECS 结构约定:
- 组件:秘密 ID 与已发现集合资源由你定义。
- 资源:运行期全局表放在资源中(bevy-data-resources),而非 autoload。
- 系统:在 Update 或固定时间步中修改这些组件。当伤害必须先于死亡结算时使用 .chain()。
- 消息:一次性事实(命中、拾取、任务推进)通过 bevy-events-messaging 处理,本文件不新增事件类型名。
从 Godot 迁移的对应关系:
- 秘密 ID:Godot 中为概念,Bevy 中为世界对象上的组件。
- 已发现集合:Godot 中为概念,Bevy 中为 ID 的资源。
- 持久化:Godot 中为概念,Bevy 中交给 bevy-save-load。
适用场景
适用于需要在 Bevy 游戏中实现可选秘密、发现标记、注视触发、输入序列解锁或进度解锁的开发者。
限制
- 目标版本为 Bevy 0.20+。
- 已发现集合的持久化不属于本技能范围,应交给 bevy-save-load。
- 一次性事实应交给 bevy-events-messaging,本文件不新增事件类型名。
- 不得在文档 URL 中固定 /0.20.0/。
- 不得从两个无序系统可变查询同一组件。
- 不得在本技能中发明物理、导航、网络或 XR crate。
- 不得在 Bevy 代码中使用 Godot 节点、资源或信号类型。
- 不得发明 API 或未命名的第三方 crate 作为求解器。
- 官方文档、资产、示例等参考链接以最新分支为准。
相关技能
前置:bevy-master、bevy-ecs-composition、bevy-save-load、bevy-data-resources、bevy-events-messaging。 互补:bevy-state-machines、godot-mechanic-secrets。 下游/消费者:暂无。 主技能:bevy-master。