mcpField
G
godot-genre-tower-defense

godot-genre-tower-defense

github.com/thedivergentai开发907301 次安装2 周前更新
代码仓库

关于 godot-genre-tower-defense

面向使用 Godot 开发塔防游戏的技能,涵盖波次推进、炮塔行为、目标选择、路径验证和性能模式。提供脚本及固定路线与迷宫式关卡的设计指引。

主要功能

  1. 01基于 Resource 的敌人波次
  2. 02炮塔状态机与攻击逻辑
  3. 03按优先级选择敌人目标
  4. 04炮塔放置时验证路径
  5. 05对象池与 PhysicsServer 弹幕模式

适用场景

  1. 01构建可配置的敌人波次序列
  2. 02实现按先后、距离终点或生命值选敌
  3. 03防止放置炮塔阻断敌人路线
  4. 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.md
common-pitfalls-extended.md
elite-technical-patterns.md
godot-tips.md
key-mechanics.md
migration-notes.md
scripts/
burst_search_tower.gd
grid_path_validator.gd
homing_projectile_3d.gd
organic_enemy_movement.gd
tower_defense_patterns.gd
tower_targeting_system.gd
tower.gd
wave_manager.gd
wave_resource_spawner.gd

详细介绍

核心循环

  1. 准备:使用可用货币建造或升级炮塔
  2. 波次:敌人生成并沿路径向目标前进
  3. 防御:炮塔自动瞄准敌人并造成伤害
  4. 奖励:击杀敌人可获得货币
  5. 升级:波次的难度和复杂度逐渐提升

绝不这样做(专家级反模式)

设计与策略
  • 绝不让所有炮塔的定位都相同;必须确保各有专长:范围减速、穿甲、防空、爆发狙击和范围伤害。
  • 绝不允许出现没有出路的“死亡螺旋”;必须提供少量逆转局势奖励,或为存下的金币提供利息,以避免早期失败不可避免。
  • 绝不让前期波次变成枯燥的等待;必须提供**“提前召唤”奖励**,跳过等待时间并加快游戏节奏。
  • 绝不信任客户端的经济更新;在合作模式中,必须要求权威服务器验证货币增加和炮塔购买。
路径与放置
  • 在迷宫式游戏中,绝不允许玩家“封死”出口;完成炮塔放置前,必须使用**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),实现高效瞄准。
模块化组件

决策树(必须阅读的脚本)

路径类型
类型方法脚本 / API
固定路线Path2D / PathFollow2D progresswave_manager.gd、wave_resource_spawner.gd
迷宫式放置前检查是否会封路NavigationServer2D.map_get_path / AStarGrid2D(绝不使用)
自然曲线Bezier PathFollow progress优先使用 PathFollow,而非逐帧寻路
目标优先级
优先级排序键必须
FIRSTprogress 最高(最接近出口)tower_targeting_system.gd
LASTprogress 最低同上 — 已实现 LAST
STRONGEST / WEAKESThealth 降序 / 升序同上 — 已实现 WEAKEST

使用基于信号缓存的范围 Area 进入/退出检测,以及分帧获取目标(acquire_interval_frames)。每帧都不要调用 get_overlapping_bodies()。

经济系统
关注点规则脚本
波次组成Resource .tres 波次wave_manager.gd
合作购买服务端验证金币tower_defense_patterns.gd
逆转战局利息 / 提前呼叫奖励设计层面 — 不属于塔的 FSM

PhysicsServer 弹体黄金路径

数量超过约 500 时:

  1. 必须使用 tower_defense_patterns.gd spawn_fast_bullet(PhysicsServer3D 运动学 RID)。
  2. 池化 RID;通过 intersect_shape 实现 AoE;死亡时延迟禁用碰撞。
  3. 数量不多时: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-master — 用于跨技能发现的库路由器和镜像模块入口。

评论

支持 Markdown