关于 godot-genre-survival
面向 Godot 生存游戏开发者的类型技能,涵盖需求值、采集、物品与制作、建造和世界生成。重点是数据驱动的资源设计,以及线程处理和 MultiMesh 等规模化实践。
主要功能
- 01按活动强度消耗饥饿与口渴值
- 02基于 Resource 的物品、配方和背包数据
- 03采集、制作与工具等级产出
- 04GridMap 基地放置与安全区生成规则
- 05线程化区块加载和程序化生成
适用场景
- 01实现饥饿、口渴及渐进生命值损失
- 02构建带堆叠限制和耐久度的物品系统
- 03制作工具升级与配方解锁流程
- 04生成生存世界的生物群系与区块
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ thedivergentai/ game-dev-agentic-skills --skill godot-genre-survival安装后在 Claude Code 中输入/godot-genre-survival确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/architecture-overview.mdcommon-pitfalls-extended.mdelite-technical-patterns.mdgodot-tips.mdkey-mechanics.mdmigration-notes.mdscripts/aipathing_system.gdbase_builder.gdbiome_generator.gdcrafting_recipe_processor.gdinteractable.gdinventory_data.gdinventory_slot_data.gdinventory_slot_resource.gdmodular_inventory_controller.gdstatus_depletion_manager.gdsurvival_patterns.gd详细介绍
绝对禁止事项(专家级反模式)
生理状态与需求
- 绝对不要让“需求值”持续以固定速率衰减;必须根据活动严格调整速率(例如,冲刺时的饥饿值消耗速度是闲置时的 3 倍)。
- 绝对不要因饥饿或脱水而立即死亡;必须改为逐步扣除 HP,并提供明显不同的视觉/音频警告。
- 绝对不要用浮点计时器执行精确的生死攸关检查;必须使用
is_equal_approx()或<=,避免因精度问题漏判 0.0。 - 绝对不要在 UI 脚本中表示世界时间/昼夜循环;必须使用 AutoLoad(单例),将状态与视觉表现解耦。
采集与库存
- 绝对不要在没有成长机制的情况下,让采集变得枯燥;必须实现工具分级成长(例如,石斧每击采集 1 个木材,钢斧每击采集 5 个木材),以奖励技术进步。
- 绝对不要允许库存无限堆叠;必须采用重量上限或严格的堆叠上限(例如,64 个物品),促使玩家策略性地管理资源。
- 绝对不要强迫玩家“猜测”制作配方;必须采用发现系统,在获取材料后解锁配方。
- 绝对不要忘记对共享的 Resource(如物品耐久度)执行 duplicate(true);否则,所有实例都会同时损坏。
- 绝对不要将沉重的物品/制作定义存储在 Node 属性中;必须使用自定义 Resource 容器来存储轻量级数据。
世界与性能
- 绝对不要在重生点生成威胁;必须设定安全区半径(床铺/出生点),禁止敌人在其中生成。
- 绝对不要为植被实例化 10,000 个独立的
MeshInstance3D节点;必须使用 MultiMeshInstance3D 来批量绘制。 - 绝对不要同步加载大型世界区块;必须使用
ResourceLoader.load_threaded_request()来避免卡顿。 - 绝对不要将复杂字典保存到标准文本文件;必须使用二进制序列化,以提高速度并节省空间。
- 绝对不要在主线程运行程序化地形/噪声算法;必须将其交给 WorkerThreadPool 处理。
- 绝对不要在 GDScript 中硬编码大型制作表;必须使用
ConfigFile或 JSON,以便轻松调整平衡并支持 Mod。
专家级组件(scripts/)
强制要求:优先使用这些脚本,而不是内联占位代码。不要将
pass架构粘贴到场景中。
survival_patterns.gd
必须首先阅读 —— 活动缩放的生命值状态、填充 MultiMesh、多线程加载区块、WorkerThreadPool 噪声区块(generate_noise_chunk_async)、GridMap 网格对齐/放置、持久化收集、深度 duplicate(true)。
status_depletion_manager.gd
需求系统必用 —— 在 _physics_process 中按活动缩放饥饿/口渴值(符合“绝对禁止”:不得固定速率衰减)。
inventory_data.gd
基于 Resource 的核心网格库存:堆叠上限、元数据、添加/移除。
inventory_slot_data.gd
轻量级 UI↔逻辑插槽 DTO。
inventory_slot_resource.gd
可序列化的插槽 Resource,支持耐久度追踪。
modular_inventory_controller.gd
将库存数据连接到 UI 信号的控制器。
interactable.gd
通用的采集/拾取/世界触发器接口。
crafting_recipe_processor.gd
检查材料 → 消耗材料 → 发放成品(便于发现配方)。
决策树 — 生存系统
| 需求 | 路径 |
|---|---|
| 物品 / 配方 / 耐久度数据 | 自定义 Resource + inventory_slot_resource.gd |
| 背包 / 堆叠 / 重量 | inventory_data.gd + modular_inventory_controller.gd — 重量上限 / 拖放 UI → godot-inventory-system(此处不要重复讲解网格 UI) |
| 饥饿 / 口渴 | status_depletion_manager.gd — 根据移动状态设置 sprinting |
| 采集 / 打开 / 拾取 | interactable.gd |
| 制作 | crafting_recipe_processor.gd |
| 基地建造吸附 | survival_patterns.gd place_if_empty / GridMap |
| 森林植被 | 通过 populate_nature 使用 MultiMesh — 切勿创建 10k 个 MeshInstance3D |
| 区块流式加载 | survival_patterns 中的 load_world_chunk 多线程路径 |
| 大规模程序化噪声 / 生物群系 | survival_patterns 中的 generate_noise_chunk_async — 或在地形超出区块辅助函数的处理范围时,必须使用 godot-procedural-generation |
| 阶段 | 配套技能 | 用途 |
|---|---|---|
| 1. 数据 | godot-resource-data-patterns | 物品 / 配方 Resources |
| 2. UI | godot-ui-containers, godot-inventory-system | 网格 + 拖放 |
| 3. 世界 | godot-procedural-generation, godot-3d-world-building | 噪声、GridMap |
| 4. 逻辑 | godot-signal-architecture, godot-state-machine-advanced | 生存需求 + 交互 |
| 5. 存档 | godot-save-load-systems | 世界 + 背包 + 配方 |
核心机制(指引,不是教程)
生存需求(随活动调整)
将移动状态接入 StatusDepletionManager.sprinting。生命值等指标耗尽时,逐渐扣减 HP 并发出警告(绝不立即死亡)。参阅脚本 — 不要在 _process 中重新引入恒定的 decay_rate。
分级工具效果
石斧产量为 1 / 钢斧产量为 5 / 靠近时自动使用电锯 — 将其编码为物品 Resource 元数据,而不是硬编码到采集脚本中。
出生点安全区
启用威胁生成器之前,重新抽取出生点,确保其位于床 / player_beds 半径范围之外。
Godot 专属提示
- TileMapLayer(Godot 4)用于 2D 世界 — 不要使用 Godot 3 的
TileMapAPI。 - FastNoiseLite 用于生物群系 / 资源密度(大型地图应通过 WorkerThreadPool 在主线程之外处理)。
- 大型背包和区块字典使用 ResourceSaver / 二进制序列化。
- 使用 Y-Sort 处理俯视角 2D 场景中树木 / 道具的遮挡。
常见问题
- 枯燥乏味 — 根据工具等级提高采集产量。
- 背包杂乱 — 提供较大的堆叠上限 + 储物设施。
- 缺少目标 — 除了单纯求生,还应加入科技树 / Boss 压力。
精英级技术实现
开始处理基地建造吸附或生物群系 / 噪声时,必须先阅读 elite-technical-patterns.md。首次处理生存需求 / 背包 / 制作时不要加载 — 使用上方的脚本目录。
深入配方(按需)
| 主题 | 参考资料 / 脚本 |
|---|---|
| 生存需求 / 制作 / 工具 | key-mechanics.md + 随附的生存脚本 |
| 基地建造网格吸附 | elite-technical-patterns.md + base_builder.gd |
| 生物群系 / 出生点安全 | elite-technical-patterns.md + biome_generator.gd |
参考资料
渐进式披露:只有在研究特定 API 时才打开官方文档链接;只有在需要转向配套领域时才加载相关技能 — 不要预先加载整个技能网络。
官方文档
- 资源 — 物品定义、配方表和库存槽位应作为资源保存,这样设计师无需更改代码即可调整重量、堆叠上限和耐久度。
- 空闲与物理处理 — 饥饿度和口渴度的衰减必须在
_physics_process(或_process)中乘以delta,确保生命值消耗不受帧率影响。 - 单例(Autoload) — 世界时间、昼夜变化和全局需求状态应由 Autoload 管理,这样 UI 脚本就不会掌管时钟。
- 使用信号 — 库存和制作系统应发出变更信号,让 HUD 网格更新,而无需每帧轮询。
- 保存游戏 — 在不同会话间保存库存、已解锁配方、基地 GridMap 单元格和玩家生命值。
- 二进制序列化 API — 大型世界/区块字典应使用二进制包,而不是臃肿的文本转储。
- 后台加载 — 使用
ResourceLoader.load_threaded_request()流式加载世界区块,避免探索时出现卡顿。 - 使用 GridMap — 基地建造的吸附和按八叉树分批处理的结构部件使用
GridMap.local_to_map/set_cell_item。 - 使用 MultiMesh — 森林、岩石和可采集植被必须通过 MultiMesh 批量处理,而不是创建数千个 MeshInstance3D 节点。
- 使用多线程 — 程序化噪声/地形生成应交由 WorkerThreadPool 处理,绝不能在主线程中执行。
- FastNoiseLite — 生物群系和资源密度图通过采样 FastNoiseLite 渐变来生成自然的世界布局。
- AStarGrid2D — 玩家放置结构时,应将对应单元格标记为实心,让 AI 立即绕开新建基地重新规划路径。
相关技能
前置要求
- godot-gdscript-mastery — 在编写生命值和库存逻辑前,必须先掌握
is_equal_approx、Resourceduplicate(true)和按 delta 缩放的计时器。 - godot-resource-data-patterns — 物品、配方和槽位数据必须优先使用 Resource,确保耐久度和堆叠元数据能够正确序列化。
- godot-signal-architecture — 库存/制作事件总线应向 UI 和交互系统发送信号,避免节点之间紧密耦合。
- godot-autoload-architecture — 按照 Autoload 所有权规则管理昼夜循环和可跨场景切换存续的全局需求管理器。
补充技能
- godot-inventory-system — 网格堆叠、负重上限和拖放界面,让生存背包系统超越了类型游戏的概略设计。
- godot-save-load-systems — 带版本管理的世界存档涵盖物品栏资源、基地单元格和已解锁配方列表。
- godot-procedural-generation — 噪声生物群系和资源散布可与本技能中的 FastNoiseLite 模式配合使用。
- godot-3d-world-building — GridMap 工具、碰撞和 LOD 实践为大型玩家建造基地提供支持。
- godot-ai-navigation — 能够识别建造墙体的威胁 AI,需要在结构变化时更新 NavigationAgent / AStar。
- godot-ui-containers — 制作菜单和物品栏网格属于 Control 布局问题,而非游戏玩法脚本问题。
- godot-game-loop-harvest — 分级工具产出和采集循环与生存采集共享收割循环模式。
下游 / 使用方
- godot-monte-carlo-balancer — 配方成本、工具等级和需求衰减率实现数据驱动后,可通过蒙特卡洛职业模拟,在发布平衡表前验证达到科技等级所需时长和饥饿风险区间。
- godot-genre-open-world — 开放世界生存玩法会用到此处定义的区块流式加载、安全区生成和资源稀缺循环。
- godot-economy-system — 贸易站和制作品消耗渠道将生存制作扩展到软货币经济体系。
主技能
- godot-master — 技能库路由器和镜像模块入口;用于发现同级技能,或在编辑领域技能后同步共享脚本镜像。