用途:为 Godot 4 的波次制游戏提供战斗波次编排、难度缩放与自动化敌人生成的实现模式,适用于波次射击、塔防和竞技场游戏。
主要能力:以「波次状态」为核心架构,将波次视为数据驱动的过渡,用 WaveResource 定义遭遇组合,由 WaveManager 顺序处理。核心职责分为 Manager(编排时间线、处理波间隔、通过组计数与信号追踪清场与胜利条件)、Spawner(提供敌人出现空间位置的解耦节点)和 Resource(不可变数据容器,便于策划不改代码即调整平衡)。支持线性、无尽、触发式三种推进模式:线性用于剧情任务,手工编排 WaveResource 列表;无尽用于生存模式,用倍率数学生成 WaveResource;触发式用于 RPG 遭遇,仅在玩家进入 Area3D 时开始波次。密度决策树按同屏敌人数选择方案:约 80 个以下 SceneTree 敌人用节点管理器加 Marker 生成器;成百上千的群体视觉用 MultiMesh 加权重组合;约 1 万实体用 PhysicsServer/NavigationServer 的 RID。
使用方式:先编写 wave_resource.gd 组合表,放置 wave_spawner.gd 的 Marker(需要权重变化时用 wave_weighted_spawner.gd),将 wave_manager.gd 的 spawner 指向该 Marker;管理器用 call_deferred 延迟生成,并通过 &"enemies" 组和信号清场。当权重取代固定数量时,在组合循环中调用 WaveWeightedSpawner.spawn_enemy()。可用脚本包括 wave_loop_patterns.gd(MultiMesh 群集、异步寻路、后台预加载、服务端物理怪物等 10 种模式)、wave_manager.gd、wave_resource.gd、wave_spawner.gd、wave_weighted_spawner.gd,以及参考文档 wave-expert-patterns.md。
限制与禁止事项:不要用 get_children() 扫描敌人,应使用 enemies 组;不要频繁 instantiate 与 queue_free 数百敌人,应使用对象池;群体不要用大量独立 MeshInstance3D,应使用 MultiMeshInstance3D;不要在主线程为数百智能体计算寻路,应启用异步迭代或使用 NavigationServer3D.query_path();添加子节点前须检查 is_inside_tree();不要将为生成的怪物直接赋予预加载资源(如 stats.tres),应调用 base_stats.duplicate_deep();高频组调用使用 StringName;物理回调中不要同步生成实体,应使用 call_deferred;死亡敌人应立即 set_deferred("disabled", true) 关闭碰撞;MultiplayerSynchronizer 仅支持基础类型,复杂数据应同步 UID 或 ID;不要无提示自动开始波次;不要硬编码 (0,0,0) 生成位置,应使用 Marker3D;不要每帧统计子节点判断波次完成;不同类型实体不要共用导航地图;不要非均匀缩放生成器的碰撞形状。官方文档与相关技能链接的具体内容以原文为准,其他事实暂未提供。