Agent Skills
返回列表
💻

Godot 4 多人联机开发

开发编程 更新于 2026.08.30

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/godot-multiplayer-sh-rwpnda。

技能介绍

要解决什么问题

在 Godot 4.x 里做联机,常见需求是:主机/加入对局、远程调用逻辑、决定「谁有权改这个节点」、以及把场景实例和属性自动同步到各端。底层自己拼 TCP/UDP 或 WebSocket 成本高,本地分屏也不走这套 API。本技能聚焦 Godot 4.3+ 的 ENet 高层联机:MultiplayerPeer、@rpc、MultiplayerSpawner / MultiplayerSynchronizer,并默认 客户端输入不可信、服务端权威。

核心工作流

  1. 创建 ENetMultiplayerPeer,create_server(port, max) 或 create_client(ip, port),赋给 multiplayer.multiplayer_peer。服务端 ID 固定为 1,客户端为随机正 ID。
  2. 在 multiplayer 上处理 peer_connected、peer_disconnected、connected_to_server、connection_failed、server_disconnected。
  3. 用 @rpc(...) 声明远程方法;通过 rpc() 或 rpc_id(peer_id) 调用;内部用 multiplayer.get_remote_sender_id() 识别发送方。
  4. 各端脚本里 @rpc 方法集合与注解必须完全一致(Godot 会校验 checksum,不一致可能静默失败或报错位置误导)。
  5. set_multiplayer_authority(id) 设节点权威,用 is_multiplayer_authority() 门控输入与 RPC。
  6. MultiplayerSpawner 在各端实例相同场景;MultiplayerSynchronizer 同步选定属性。
  7. 在服务端校验:位置、命中、血量等不要直接信任客户端上报的结果,只收「意图」再广播。

技能还覆盖典型模式:Host/Join、客户端把输入 RPC 到服务端(any_peer + call_local)、每玩家控制各自角色、Synchronizer 编辑器配置等。

适用边界与坑

  • 不适用:纯本地分屏;原生 PacketPeer 级协议;HTTP 请求;存档持久化请用 save-systems 类技能。
  • 默认 @rpc 为 authority,客户端调用会被忽略,需 any_peer;主机也要跑时用 call_local。
  • NodePath 各端须一致;spawn 时用 MultiplayerSpawner 或 add_child(node, true) 保证命名一致。
  • @rpc 只能写在 Node 子类;参数勿传 Object/Callable,只用标量与容器类型。
  • 断开时把 multiplayer.multiplayer_peer 设为 OfflineMultiplayerPeer.new();Android 导出需 INTERNET 权限。

更细的 Spawner/Synchronizer、通道、SceneMultiplayer 鉴权与专用服导出说明见技能内 references/replication-and-rpc.md。

使用场景

  • Godot 4 项目要从单机改成可主机/加入的联机对局,需要按 ENet 建连并处理断线重连信号
  • 为玩家角色做「各端只驱动自己的 Avatar」,要用节点权威和客户端到服务端的输入 RPC
  • 新刷出的敌人或子弹要在所有客户端出现且属性一致,需配置 MultiplayerSpawner 与 Synchronizer
  • 联机里血量与命中结果不能信客户端上报,要在服务端校验意图后再用 RPC 广播结果

适合人员

  • 用 Godot 4 做独立联机游戏的程序员,需要 ENet、@rpc 与状态复制的标准流程
  • 从 Godot 3 或自研 Socket 迁到 4.x SceneMultiplayer 的客户端工程师
  • 要导出无头专用服、并在编辑器里配 MultiplayerSynchronizer 通道与复制属性的后端/全栈开发者
  • 在联机原型阶段反复踩 RPC checksum 与 NodePath 不一致问题的 gameplay 程序员