本技能是一个面向塔防(Tower Defense)游戏设计的专家级蓝图,适用于类似 Bloons TD、Kingdom Rush、Fieldrunners 的作品。其核心主张是:策略性布局、资源管理与不断升级的难度共同定义了塔防玩法。
核心循环 玩家在准备阶段使用现有货币建造或升级防御塔;随后进入波次阶段,敌人沿路径生成并向目标推进;防御阶段中防御塔自动索敌并造成伤害;击杀敌人后获得货币奖励;之后波次难度与复杂度逐步提升,形成“准备—出怪—防守—奖励—升级”的循环。
关键设计原则与禁忌 资料明确列出了一系列“绝不要做”的规则:不要让所有防御塔的强度完全相同,否则将失去策略选择,每座塔必须有独特定位(范围伤害、减速、破甲、对空等);在进行迷宫式塔防(mazing)时,不要使用同步的 NavigationServer 烘焙,因为 NavigationRegion2D.bake_navigation_polygon() 会阻塞主线程,应改用 NavigationServer2D.get_maps() 加工作线程或固定路径;不要让玩家完全封死出口路径,放置防御塔前应用 NavigationServer2D.map_get_path(start, goal) 验证,空路径即视为非法建造;不要每帧调用 Area2D.get_overlapping_bodies(),因为 500 个敌人乘以 60fps 会产生约 3 万次碰撞检测,应记录 bodies_entered 到数组中并在 body_exited 时移除,只查询一次;不要让前几波感觉像无意义的杂活,前三波应引入机制而非令人厌倦,可以把计时器从 50% 开始或提供“提前召唤”奖励来跳过;不要让玩家在没有追赶机制的情况下陷入死亡螺旋,即一个敌人漏过导致金钱减少、下一波更难、最终必然失败,应加入存款利息或离散的波次难度。
架构阶段划分 该技能把实现拆分为五个阶段:网格与路径(涉及 tilemap-mastery、navigation-2d),用于定义敌人行走与防御塔建造的位置;防御塔(涉及 math-geometry、area-2d),负责射程检测、旋转与弹道预测;敌人(涉及 path-following、steering-behaviors),负责沿路径移动;管理(涉及 state-machines、loop-management),负责波次生成逻辑与游戏阶段;UI(涉及 ui-system、drag-and-drop),用于建造防御塔与查看属性。
架构概览与示例 资料提供了 Wave Manager 的 GDScript 示例,定义了 wave_started、wave_cleared、enemy_spawned 信号,维护 waves 数组、current_wave_index 与 active_enemies,并通过 start_next_wave 触发波次、_spawn_wave 按分组延迟与间隔生成敌人、_on_enemy_died 递减敌人数并在清空时发出 wave_cleared 信号。防御塔逻辑被设计为自主智能体,包含 Idle、AcquireTarget、Attack、Cooldown 状态,索敌优先级有 First、Last、Strongest、Weakest、Closest 等,示例中演示了以“最接近路径终点”为优先的索敌方式。
寻路变体 资料区分两种路径方案:固定路径(Kingdom Rush 风格)让敌人沿预定义的 Path2D 移动,通过 PathFollow2D 作为敌人父节点实现,优点是确定性、易平衡、性能优化,缺点是玩家对路径塑造的参与度较低;迷宫式(Fieldrunners 风格)让玩家用防御塔阻挡或改道敌人,敌人使用 NavigationAgent2D,防御塔更新 NavigationRegion2D(在独立线程烘焙),优点是策略深度高,缺点是重算成本高,且需要防堵死逻辑(不能让玩家封死出口)。
关键机制实现 在弹道预测方面,资料给出 get_predicted_position 示例,通过目标相对位置的长度除以投射物速度得到命中时间,再用 target.global_position 加上 target.velocity 乘以该时间,得到预测位置。经济系统被描述为第二核心循环,包含击杀奖励、利息或收入(奖励存钱,体现风险与回报)、以及提前召唤下一波以获得额外金钱。
常见陷阱 资料再次强调三类常见问题:死亡螺旋需要追赶机制或离散波次难度来修复;无用的防御塔,每种塔必须有独特定位;路径封堵,在迷宫式游戏中要确保玩家不能完全堵死通往出口的路径,建造前用 NavigationServer2D.map_get_path 验证。
Godot 专用建议 物理层方面,把敌人放在特定层(例如第 2 层),防御塔的射程 Area 使用不同的掩码,避免防御塔检测到彼此或墙体;Area2D 性能方面,面对大量敌人时尽量避免每帧开启 monitorable/monitoring,当敌人数超过 500 时可用 PhysicsServer2D 查询优化;对象池对投射物和敌人都很重要,以避免密集波次期间的垃圾回收卡顿。