mcpField
G
godot-genre-battle-royale

godot-genre-battle-royale

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

关于 godot-genre-battle-royale

面向 Godot 大逃杀游戏开发,涵盖多人联机、风暴区域、战利品和大型对局。通过指定脚本提供服务器权威、网络同步与性能优化模式。

主要功能

  1. 01服务器权威验证
  2. 02大型对局的 ENet 配置
  3. 03不可靠移动同步
  4. 04风暴阶段与伤害逻辑
  5. 05战利品对象池与验证
  6. 06无头服务器及性能模式

适用场景

  1. 01设计风暴收缩阶段
  2. 02在服务器验证命中与拾取
  3. 03降低大型对局的网络负载
  4. 04流式加载地图并管理密集战利品

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/thedivergentai/game-dev-agentic-skills --skill godot-genre-battle-royale

安装后在 Claude Code 中输入/godot-genre-battle-royale确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
expert-battle-royale-patterns.md
migration-notes.md
scripts/
async_map_loader.gd
authoritative_looting.gd
enet_br_server.gd
headless_branch_logic.gd
kill_feed_bus.gd
lag_compensator.gd
monster_synchronizer.gd
multimesh_vegetation.gd
rid_loot_spawner.gd
server_state_buffer.gd
state_replication_unreliable.gd
storm_system.gd
targeted_rpc_relay.gd
threaded_ai_manager.gd

详细介绍

绝对不要做(专家级反模式)

网络与规模
  • 绝对不要每帧同步所有 100 名玩家;必须使用相关性系统,仅同步约 100m 范围内玩家的高频数据。远处玩家以约 5Hz 的频率同步。
  • 绝对不要将 TRANSFER_MODE_RELIABLE 用于移动数据;必须使用不可靠传输,以防止数据包积压和网络拥塞。
  • 绝对不要侧重客户端命中检测;必须使用权威服务器验证,由服务器根据状态历史确认“是否命中?”。
  • 绝对不要信任客户端提供的游戏状态;必须仅由权威服务器验证所有移动、拾取和物品栏变更。
  • 绝对不要运行带视觉效果的专用服务器;必须使用无头模式(--headless)或虚拟驱动程序,以节省大量 CPU/GPU 资源。
  • 绝对不要在连接前调用 RPC;必须等待 connected_to_server 信号后再尝试同步逻辑。
机制与性能
  • 绝对不要为安全区选择完全随机的中心;必须选择能确保新圆完全位于当前圆内的中心。
  • 绝对不要允许“风暴穿越”;必须使用到中心的距离计算,而非简单的碰撞周界,以防在低 Tick 速率下跳过伤害。
  • 绝对不要在没有对象池的情况下生成战利品;必须预先实例化,并切换可见性/碰撞状态,以避免密集生成时出现 GC 峰值。
  • 绝对不要忽略 VisibilityNotifier3D;对于观察者不可见的玩家,必须禁用 AnimationPlayer、_process() 和开销较大的 AI 逻辑。
  • 绝对不要在服务器的紧密循环中打印内容;必须避免使用 print(),因为控制台 I/O 会阻塞,并在高玩家人数的对局中严重拖累服务器性能。

可用脚本

必须遵守:实现相应模式前,请先阅读对应脚本。

区域 / 风暴
storm_system.gd

任何区域/风暴相关工作都必须使用——阶段半径、确保新中心位于当前区域内的选择逻辑、基于到中心距离的伤害计算(防止穿越)。不要粘贴内联的 zone_manager 教程。

网络与多人游戏
kill_feed_bus.gd

带有对局统计跟踪的全局淘汰信号总线。

headless_branch_logic.gd

专家级专用服务器初始化逻辑,根据 headless 执行状态和服务器专属功能标记分支处理。

enet_br_server.gd

针对通过 UDP 同时连接 100+ 对等端的高玩家数 ENet 服务器配置进行了优化。

state_replication_unreliable.gd

通过 TRANSFER_MODE_UNRELIABLE 同步玩家变换的模式,可最大限度降低大型对局中的网络拥塞。

authoritative_looting.gd

权威服务器端验证逻辑,用于防止作弊拾取物品和无限拾取。

targeted_rpc_relay.gd

使用 rpc_id() 定向联系特定对等端、减少无用数据包广播的优化通信模式。

server_state_buffer.gd

通过顺序状态缓冲和基于 Tick 的排序,处理网络抖动和乱序到达的 UDP 数据包。

性能与优化
rid_loot_spawner.gd

绕过节点层级来支持大规模战利品密度。直接使用 RenderingServer,消除物品掉落产生的 CPU 开销。

async_map_loader.gd

使用 ResourceLoader 后台线程,以非阻塞方式流式加载地图区域,实现流畅的开放世界探索。

multimesh_vegetation.gd

通过 MultiMeshInstance3D 绘制茂密植被和环境资源(100k+ 个实例),最大限度提升渲染性能。

threaded_ai_manager.gd

将服务器端 Bot 行为和寻路逻辑交由 WorkerThreadPool 处理,以防止主线程卡顿。

从基线恢复

大逃杀中绝对不要做的事

  • 绝不要在没有 INTERNET 权限的情况下导出移动客户端 — 如果清单中缺少网络权限,Android/iOS 上的通信将悄无声息地失败。
  • 绝不要对不可信数据使用 get_var(true) — 反序列化任意对象可能允许攻击者在服务器或其他客户端上执行远程代码。
  • 绝不要通过网络同步 Object 或 Resource 类型 — MultiplayerSynchronizer 只能用于基本类型(int、float、vec)。
  • 绝不要假设 UNRELIABLE 数据包会按顺序到达 — 应谨慎设计状态插值,以处理丢失或乱序的 tick。
  • 绝不要在未手动调用的情况下将 multiplayer_poll 设为 false — 如果使用自定义线程却未调用 multiplayer.poll(),所有流量都会冻结。

核心循环

部署 → 搜刮 → 随风暴移动 → 交战 → 成为最后的幸存者。

技能链(仅限 GDSkills 同行)

阶段技能用途
1. 网络godot-multiplayer-networking权威服务器、相关性、RPC
2. 地图godot-3d-world-building, godot-genre-open-world地形规模、流式加载、HLOD
3. 物品godot-inventory-system背包/配件/护甲
4. 战斗godot-genre-shooter, godot-combat-systemHitscan/弹丸 + 伤害验证
5. 区域强制要求 storm_system.gd风暴阶段/DPS/包含区域中心
6. 平衡godot-monte-carlo-balancer区域 DPS、战利品稀有度、TTK 区间

决策树(删除内嵌的部署/搜刮/区域教程)

区域/风暴
需求操作
阶段收缩、包含区域中心、距离 DPS强制要求 storm_system.gd
风暴墙 VFX倒置的 SphereMesh + 由风暴半径驱动的无光照 cull_disabled 着色器
战利品
需求操作
密集掉落rid_loot_spawner.gd + 对象池
防作弊拾取强制要求 authoritative_looting.gd
表格/稀有度数据 Resources + 同行库存 — 不要在 SKILL.md 中使用 instantiate() 循环
部署
需求操作
飞机 → 自由落体 → 降落伞 → 落地在玩家控制器上使用有限状态机;服务器验证着陆库存
地图分区async_map_loader.gd
网络
需求操作
100+ 个对等节点enet_br_server.gd + headless_branch_logic.gd
移动state_replication_unreliable.gd
相关性近处约 20Hz 以上,远处约 5Hz;replication_interval / 兴趣管理
定向消息targeted_rpc_relay.gd
抖动缓冲区server_state_buffer.gd

进阶(保持精炼,不重复讲解部署/战利品)

延迟补偿

服务端保留变换历史;根据回退后的姿势验证客户端命中时间戳(权威验证)。与射手/战斗对等节点配合使用。

增量补丁

对生命值/库存使用 MultiplayerSynchronizer + REPLICATION_MODE_ON_CHANGE;仅对频繁变化的变换使用 ALWAYS。使用 delta_interval 限制频率。

区域可视化工具

在反转球体上使用未着色、cull_disabled 的空间着色器,并通过 storm_system.gd 缩放球体。

常见陷阱

  1. 战利品过多 → 对象池 + RID 生成器
  2. 蹲守 → 风暴迫使玩家移动(storm_system.gd)
  3. 客户端判定命中 → 服务端使用历史数据进行验证

专家知识(按需)

LLM 无知规则: 如果通用 Agent 在阅读之前不会知道某项内容,就加载参考资料——绝不删除专家补充内容。

参考资料

渐进式披露:仅在研究特定 API 时打开官方文档链接;在转向相关领域时加载相关技能——不要预加载整个知识网络。

官方文档
  • 高层级多人游戏 — RPC 权限、对等端生命周期,以及支持 100 名玩家相关性管理而非全网格广播的可见性感知同步模式。
  • ENetMultiplayerPeer — 面向高并发对局玩家规模的 UDP 主机/客户端对等端,避免 TCP 队头阻塞。
  • MultiplayerPeer — 可靠与不可靠/无序传输模式,确保移动状态快照不会堵塞通道。
  • MultiplayerSynchronizer — 属性复制、replication_interval/按变化发送增量,以及用于兴趣管理的逐对等端可见性筛选器。
  • MultiplayerSpawner — 玩家、战利品掉落物的生成/销毁复制,以及确保后加入玩家的场景树一致性。
  • 命令行教程 — 使用 --headless 和 CLI 多实例启动专用对局服务。
  • 为专用服务导出 — 服务导出预设和功能标签,可剥离仅供客户端使用的渲染/输入路径。
  • 遮挡剔除 — 为密集建筑群烘焙遮挡数据,确保大型 BR 地图在 GPU 上可行。
  • 网格细节层次(LOD) — 针对地形道具和建筑的距离 LOD,这些对象在空投区规模下占据主要绘制开销。
  • 使用 MultiMeshes 优化 — 将植被/碎片批处理为 MultiMesh 绘制调用,而不是为每个实例创建节点。
  • 使用 Servers 优化 — 为密集的战利品视觉效果使用 RenderingServer RID 路径,避免 SceneTree 节点开销。
  • 后台加载 — 使用线程化 ResourceLoader 执行区块流式加载,实现开放世界地图的非阻塞加载。
相关技能
前置要求
  • godot-multiplayer-networking — 权威服务器 RPC、传输模式以及大厅/对等端生命周期;BR 相关性管理和延迟补偿均以此为基础。
  • godot-project-foundations — 用于无头专用服务和客户端构建的 Autoload、导出功能标志和项目布局。
  • godot-3d-world-building — 适用于风暴规模地图的大型地形分块、碰撞生成和世界流式加载前置要求。
补充
  • godot-adapt-single-to-multiplayer — 在应用 BR 规模的兴趣管理前,先拆分权限、构建预测壳层并实现快照插值。
  • godot-server-architecture — 权威比赛模拟所用的无头主机脚手架和 PhysicsServer/RID 模式。
  • godot-export-builds — 用于多实例比赛测试的专用服务器预设、INTERNET 权限和 CLI 打包。
  • godot-inventory-system — 背包、配件和护甲状态;权威拾取逻辑必须在服务器端验证这些内容。
  • godot-performance-optimization — 当战利品密度和对等节点数量给比赛服务器/客户端造成压力时,使用 LOD、对象池和 CPU 预算。
  • godot-signal-architecture — 击杀信息流和比赛事件总线保留在本地,跨对等节点的淘汰则通过 RPC 传递。
  • godot-genre-shooter — BR 交战循环中使用的即时命中/弹道战斗模式和延迟补偿验证。
下游 / 消费方
  • godot-monte-carlo-balancer — 模拟区域 DPS 阶段、战利品稀有度表和 TTK 区间,确保风暴/战利品节奏在 100 名玩家的比赛中保持公平。
  • godot-ai-navigation — 使用线程化的服务器端机器人填充大厅时,实现机器人寻路和经过兴趣筛选的 AI。
主模块
  • godot-master — 库路由器和镜像模块入口;在查找负责跨领域 BR 问题的 Domain Skill 时打开。

评论

支持 Markdown