导入根目录 project.godot 后按 F5,或打开 world.tscn 按 F6。默认 6 个 Agent 自动采集、烹饪、进食、饮水、制作武器并应对怪物。世界按 Agent 数量生成树木、动物、水泉和石矿,这些资源由所有 Agent 共享。右侧 Agent 页显示当前目标与计划,Workload 页提供压力场景。
示例没有手动编组。采集和拾取允许多个 Agent 选择同一个目标,完成时检查资源是否仍然可用;同一个物品只有第一个成功拾取者能拿到。营地维护另外指定一名点火者,优先选择手持木材、其次空手且距离较近的健康角色。点火动作在开始时认领营火,取消、死亡或离开场景时释放执行权。
代码入口:world.gd 创建世界;agent/agent.gd 管理角色;agent/goap/agent.gd 连接 GOAP;agent/goap/actions/、goals/、costs/ 分别定义动作、目标和成本。角色实际行为位于 agent/abilities/,世界事实由各 State Provider 提供。
Import the root project and press F5. The Chinese guides describe integration and debugging; script names and UI labels are unchanged.
空闲时 Agent 的 FillCampStorage 目标会持续收集资源,直到营地内的木头、石头、水和肉都达到各 8 件的补货目标。每个 Agent 一次只能携带一件物资,武器是独立装备。任务切换保留携带物;死亡或从人口中移除时,物品回到地面。凋落物没有碰撞体积。所有拾取都会保留原物品模型,使用或吃掉时才移除;肉放在营地肉架上。圆形围栏保留四个入口,Agent 会从入口进出。
没有武器时,CraftCampWeapon 目标保持启用,规划器可以依次采集、拾取和存放缺少的材料。木材和石块分别放在工具台两侧;制作只能在工具台完成,完成时从营地各消耗一个模型。缺料、取消或其他角色抢先完成制作都不会部分扣料,也不会重复消费同一份材料。无需给吃饭、喝水等动作增加“必须有武器”的前置条件。
| 层 | 保存和负责的内容 | 入口 |
|---|---|---|
| 角色 | 身体状态、一个 carried_item、独立武器装备、当前执行 |
agent/agent.gd |
| 能力 | 移动、采集、拾取、存放、制作、进食等实际操作和取消 | agent/abilities/ |
| 营地 | 物理库存、配方消费、火焰计时和一名点火者 | camp.gd |
| Provider | 读取真实对象并发布个人或共享事实;观察本身不修改游戏状态 | agent/goap/actor_state_provider.gd、survival/camp_state_provider.gd |
| GOAP | 目标排序、动作前置与效果、规划和任务切换 | agent/goap/ |
角色不再保存 inventory、held_items、搬运货物等多份库存,也不再运行独立的自动搬运循环。携带类型从物品对象读取,营地数量从已存放、仍可用的模型统计。共享库存与火焰事实由营地 Provider 发布。
Replenish:<item> 是由 GOAP 启动的一轮配送,内部顺序复用采集、拾取和存放能力。如果已经手持目标物品,直接存放;否则先找营地外的凋落物,再找可采集的来源。取消当前配送会停止其子操作并保留手持物。仓库目标每轮投递一件后重新观察真实库存,未满则继续;它不会提前规划把四种库存全部装满的长链。布尔效果 STOCKPILE_FULL 是这一轮规划的乐观完成标记,下一次观察立即以实际库存覆盖。
所有优先级统一在 agent/goap/priorities.gd:
| 需求 | 优先级 |
|---|---|
| 低血量且处于危险中:逃跑 | 300 |
| 脱水 / 饥饿濒危 | 260 / 250 |
| 恢复健康 | 230 |
| 防御怪物 | 100 |
| 普通口渴 / 饥饿 | 55 / 40 |
| 被指定维护营火 | 20 |
| 保持武器装备 | 12 |
| 存放手持物 / 营地补货 | 10 |
| 回营休息 | 5 |
存放与补货同级,让一次配送完成拾取后继续存放。任务保持有效时,无关的共享事实变化不会重启动作;前置失效、目标失效或完成、需求紧迫程度变化,以及更高优先级的需求出现时才重新规划。采集途中出现更近的凋落物仍可触发改道。营火变化只让指定角色接手维护,其余有效的配送继续进行。
示例保留每次搜索 64 个节点的上限,响应速度优先;到达上限时不保证找出全局最低成本路线,是否搜索完整可在诊断中查看。这次整理没有更改通用规划器的搜索算法。
验证命令:./tests/run_ci.ps1 -Godot <Godot console executable>,覆盖单件携带、制作争用、灭火切换、点火交接、观察无副作用,以及空营地持续补齐四类库存。