关于 godot-genre-tower-defense
面向使用 Godot 开发塔防游戏的技能,涵盖波次推进、炮塔行为、目标选择、路径验证和性能模式。提供脚本及固定路线与迷宫式关卡的设计指引。
主要功能
- 01基于 Resource 的敌人波次
- 02炮塔状态机与攻击逻辑
- 03按优先级选择敌人目标
- 04炮塔放置时验证路径
- 05对象池与 PhysicsServer 弹幕模式
适用场景
- 01构建可配置的敌人波次序列
- 02实现按先后、距离终点或生命值选敌
- 03防止放置炮塔阻断敌人路线
- 04优化弹丸密集的关卡
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ thedivergentai/ game-dev-agentic-skills --skill godot-genre-tower-defense安装后在 Claude Code 中输入/godot-genre-tower-defense确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/architecture-overview.mdcommon-pitfalls-extended.mdelite-technical-patterns.mdgodot-tips.mdkey-mechanics.mdmigration-notes.mdscripts/burst_search_tower.gdgrid_path_validator.gdhoming_projectile_3d.gdorganic_enemy_movement.gdtower_defense_patterns.gdtower_targeting_system.gdtower.gdwave_manager.gdwave_resource_spawner.gd详细介绍
核心循环
- 准备:使用可用货币建造或升级炮塔
- 波次:敌人生成并沿路径向目标前进
- 防御:炮塔自动瞄准敌人并造成伤害
- 奖励:击杀敌人可获得货币
- 升级:波次的难度和复杂度逐渐提升
绝不这样做(专家级反模式)
设计与策略
- 绝不让所有炮塔的定位都相同;必须确保各有专长:范围减速、穿甲、防空、爆发狙击和范围伤害。
- 绝不允许出现没有出路的“死亡螺旋”;必须提供少量逆转局势奖励,或为存下的金币提供利息,以避免早期失败不可避免。
- 绝不让前期波次变成枯燥的等待;必须提供**“提前召唤”奖励**,跳过等待时间并加快游戏节奏。
- 绝不信任客户端的经济更新;在合作模式中,必须要求权威服务器验证货币增加和炮塔购买。
路径与放置
- 在迷宫式游戏中,绝不允许玩家“封死”出口;完成炮塔放置前,必须使用**
NavigationServer2D.map_get_path()** 验证路径是否存在。 - 迷宫式游戏中绝不使用同步的
bake_navigation_polygon();必须将其交给工作线程处理,以避免放置时出现 100ms 以上的卡顿。 - 绝不使用全局坐标处理网格逻辑;必须转换为 Vector2i/Vector3i,确保炮塔精准对齐像素。
性能与系统
- 绝不在每一帧调用
get_overlapping_bodies();必须使用信号(body_entered/body_exited)维护本地目标缓存。 - 当弹体数量超过 500 时,绝不使用
_process()移动弹体;高性能弹幕关卡必须直接使用PhysicsServer2D/3D。 - 绝不将数百个弹体生成为完整节点;必须使用对象池复用资源,避免垃圾回收导致卡顿。
- 绝不使用标准 String 表示优先级;必须使用
StringName(&"first"、&"strongest"),以便在目标选择循环中进行 O(1) 哈希比较。 - 绝不忽略 PathFollow 节点的
progress属性;必须利用它以 O(1) 的方式识别最接近出口的目标。 - 绝不在每一帧处理炮塔搜索逻辑;必须限制 ACQUIRE 搜索频率(例如每 5-10 帧一次),以节省大量 CPU 周期。
- 绝不对炮塔的
CollisionShape进行非等比缩放;必须调整 Shape 资源的半径属性,以保持碰撞计算正确。 - 绝不在敌人死亡时立即删除;必须使用 set_deferred("disabled", true) 并等待一帧,以防止物理服务器崩溃。
- 绝不在巨大的 switch 语句中硬编码波次;必须使用自定义资源(.tres),以便简洁地调整平衡和编辑序列。
🛠 专家级组件(scripts/)
原创专家模式
- wave_manager.gd - 专业的波次编排器,基于 Resource 配置敌人组成并负责清理。
- tower.gd - 基础炮塔类,具备 FSM 状态管理和射击逻辑。
- tower_targeting_system.gd - 自主优先级逻辑(First/Last/Strongest/Weakest),实现高效瞄准。
模块化组件
- tower_defense_patterns.gd - 收集了最远目标逻辑和 PhysicsServer 弹体优化模式。
决策树(必须阅读的脚本)
路径类型
| 类型 | 方法 | 脚本 / API |
|---|---|---|
| 固定路线 | Path2D / PathFollow2D progress | wave_manager.gd、wave_resource_spawner.gd |
| 迷宫式 | 放置前检查是否会封路 | NavigationServer2D.map_get_path / AStarGrid2D(绝不使用) |
| 自然曲线 | Bezier PathFollow progress | 优先使用 PathFollow,而非逐帧寻路 |
目标优先级
| 优先级 | 排序键 | 必须 |
|---|---|---|
| FIRST | progress 最高(最接近出口) | tower_targeting_system.gd |
| LAST | progress 最低 | 同上 — 已实现 LAST |
| STRONGEST / WEAKEST | health 降序 / 升序 | 同上 — 已实现 WEAKEST |
使用基于信号缓存的范围 Area 进入/退出检测,以及分帧获取目标(acquire_interval_frames)。每帧都不要调用 get_overlapping_bodies()。
经济系统
| 关注点 | 规则 | 脚本 |
|---|---|---|
| 波次组成 | Resource .tres 波次 | wave_manager.gd |
| 合作购买 | 服务端验证金币 | tower_defense_patterns.gd |
| 逆转战局 | 利息 / 提前呼叫奖励 | 设计层面 — 不属于塔的 FSM |
PhysicsServer 弹体黄金路径
数量超过约 500 时:
- 必须使用 tower_defense_patterns.gd
spawn_fast_bullet(PhysicsServer3D运动学 RID)。 - 池化 RID;通过
intersect_shape实现 AoE;死亡时延迟禁用碰撞。 - 数量不多时:homing_projectile_3d.gd / 池化 Node 均可。
塔的 FSM
必须使用 tower.gd 实现待机 → 获取目标 → 蓄力 → 开火。目标选择仍由 tower_targeting_system.gd 负责。
深入方案(按需)
| 主题 | 参考资料 / 脚本 |
|---|---|
| 波次 / 塔 / 路径 | architecture-overview.md |
| 弹体提前量与目标选择 | key-mechanics.md |
| 迷宫验证与突发搜索 | elite-technical-patterns.md + grid_path_validator.gd |
参考资料
渐进式披露:仅在研究特定 API 时打开官方文档链接;切换到相关领域时再加载关联技能 — 不要预先加载整个技能网络。
官方文档
- 导航简介(2D) — 用于迷宫式塔防路径有效性检查的 NavigationRegion2D 烘焙和地图查询。
- 使用 NavigationAgents — 塔改变可行走空间时,Agent 的路径跟随和避障。
- NavigationServer2D — 提交塔的放置前,通过
map_get_path检查是否封路。 - AStarGrid2D — 整数网格路径探测,无需完整导航烘焙即可模拟建造格。
- PathFollow2D — 用于固定路线敌人和 First/Last 目标选择的
progress/progress_ratio。 - PathFollow3D — 波次生成器和追踪瞄准参考使用的 3D 轨道跟随器。
- 使用 Area2D — 使用信号驱动的范围缓存(
body_entered/body_exited),而非逐帧轮询重叠对象。 - 物理简介 — 设置图层/遮罩,让塔的攻击范围检测敌人,而非其他塔或墙壁。
- 使用服务器 — 使用 PhysicsServer 实体处理大量弹丸,避免 Node 开销。
- 资源 — 使用 WaveDefinition
.tres数据,而非硬编码的生成分支。 - 使用多线程 — 放置过程中异步重新烘焙导航时使用的 WorkerThreadPool / Thread 模式。
- 使用 TileMaps — 用于建造格、路径和放置吸附的 TileMapLayer 网格。
相关技能
前置条件
- godot-project-foundations — 配置项目设置、图层和场景结构,为波次/塔的连接做好准备。
- godot-navigation-pathfinding — 迷宫式塔防所依赖的 NavigationServer 烘焙、Agent 和路径查询。
- godot-tilemap-mastery — 用于可建造格和路线绘制的 TileMapLayer/TileSet 网格。
补充内容
- godot-2d-physics — 面向密集波次的 Area2D 范围、图层和 PhysicsServer2D 投射物模式。
- godot-state-machine-advanced — StringName 塔防 FSM 状态(Idle/Acquire/Attack/Cooldown)。
- godot-economy-system — 击杀奖励、利息和提前呼叫收入机制,避免经济崩盘。
- godot-combat-system — 伤害类型、护甲穿透、溅射和投射物命中判定。
- godot-resource-data-patterns — 类型化 Wave/Tower Resources,以及用于平衡性调整的
duplicate(true)。 - godot-game-loop-waves — 围绕刷怪器编排准备/防守/奖励阶段。
- godot-signal-architecture — wave_started / enemy_died / currency_changed 总线,无需逐帧轮询。
- godot-performance-optimization — 在投射物数量较多时使用对象池、服务器物体和节流的目标搜索。
- godot-monte-carlo-balancer — 在发布难度曲线前,采样波次 DPS、漏怪率和经济区间。
下游 / 使用方
- godot-genre-rts — 复用路径验证和经济压力机制的基地防御与单位部署循环。
- godot-multiplayer-networking — 用于合作塔防的权威购买验证和不可靠小兵同步。
主模块
- godot-master — 用于跨技能发现的库路由器和镜像模块入口。
评论
支持 Markdown