Update nexus wiki content
This commit is contained in:
@@ -1,55 +1,64 @@
|
||||
---
|
||||
title: "Godot Multiplayer Engineer Agent Personality"
|
||||
type: source
|
||||
tags: [Godot, Multiplayer, Networking, Game Development, Godot 4, RPC, ENet, WebRTC]
|
||||
date: 2026-04-26
|
||||
tags: []
|
||||
date: 2026-05-01
|
||||
---
|
||||
|
||||
## Source File
|
||||
- [[raw/Agent/agency-agents/game-development/godot/godot-multiplayer-engineer.md]]
|
||||
- [[Agent/agency-agents/game-development/godot/godot-multiplayer-engineer.md]]
|
||||
|
||||
## Summary(用中文描述)
|
||||
- 核心主题:Godot 4 网络多人游戏专家 Agent,基于 MultiplayerAPI、MultiplayerSpawner、MultiplayerSynchronizer 和 RPC 机制实现实时多人游戏网络同步
|
||||
- 问题域:多人游戏权威模型设计、RPC 安全性、场景复制、延迟模拟测试、NAT 穿透与 WebRTC 集成
|
||||
- 方法/机制:通过 `set_multiplayer_authority()` 显式设置权威节点,RPC 调用模式(any_peer/authority/call_local)分层控制,MultiplayerSynchronizer 按需同步属性,MultiplayerSpawner 处理动态生成节点的网络复制
|
||||
- 结论/价值:提供生产级 Godot 4 多人游戏网络架构,覆盖服务器权威模型、RPC 安全审计、ENet/WebRTC 传输层配置、延迟测试与 matchmaking 集成
|
||||
- 核心主题:Godot 4 网络多人游戏开发 Agent 人格定义——专注于 MultiplayerAPI、场景复制、ENet/WebRTC 传输、RPC 和权威模型
|
||||
- 问题域:如何在 Godot 4 中构建安全、可扩展的实时多人游戏网络系统
|
||||
- 方法/机制:服务器权威架构 + RPC 安全模式 + MultiplayerSpawner/MultiplayerSynchronizer 协同 + 延迟测试
|
||||
- 结论/价值:提供完整的 Godot 多人游戏开发规范,覆盖从基础 ENet 搭建到高级 WebRTC P2P 连接的完整技术栈
|
||||
|
||||
## Key Claims(用中文描述)
|
||||
- Godot Multiplayer Engineer 通过 `set_multiplayer_authority()` 显式设置权威节点(而非依赖默认值 peer 1),确保每个动态生成节点的状态归属清晰
|
||||
- 所有游戏关键状态(位置、生命值、分数、物品状态)必须由服务器(peer 1)持有权威,客户端通过 RPC 发送输入请求,由服务器验证并更新权威状态
|
||||
- `@rpc("any_peer")` 允许任何对端调用,必须仅用于客户端→服务器请求,且函数体内必须进行服务器端验证和发送者 ID 检查,否则构成作弊漏洞
|
||||
- `MultiplayerSpawner` 是所有动态生成网络节点的唯一正确方式,手动 `add_child()` 会导致对端节点丢失同步
|
||||
- 所有 `@rpc("any_peer")` 函数必须进行服务器端验证(发送者 ID + 输入合理性检查),这是防止作弊的关键安全审计点
|
||||
- 服务器(peer ID 1)必须拥有所有游戏关键状态(位置、生命值、分数、物品状态),客户端无权直接修改
|
||||
- 使用 `set_multiplayer_authority()` 显式设置权威节点,不能依赖默认值
|
||||
- 所有状态变更必须用 `is_multiplayer_authority()` 守卫,非权威节点不得修改复制状态
|
||||
- `@rpc("any_peer")` 仅用于客户端到服务器请求,函数内部必须进行服务器端验证
|
||||
- `@rpc("authority")` 仅允许权威节点调用,用于服务器到客户端的确认
|
||||
- `@rpc("call_local")` 同时在本地执行,用于调用方也应体验的效果
|
||||
- 动态生成的网络节点必须使用 `MultiplayerSpawner`,禁止手动 `add_child()`
|
||||
- `MultiplayerSynchronizer` 的所有属性路径必须在节点进入场景树时有效,无效路径静默失败
|
||||
|
||||
## Key Quotes
|
||||
> "MANDATORY: The server (peer ID 1) owns all gameplay-critical state — position, health, score, item state" — 服务器权威模型强制规范
|
||||
> "Never use @rpc("any_peer") for functions that modify gameplay state without server-side validation inside the function body" — RPC 安全红线
|
||||
> "MultiplayerSynchronizer property paths must be valid at the time the node enters the tree — invalid paths cause silent failure" — Synchronizer 配置关键约束
|
||||
> "Don't add_child() networked nodes manually — use MultiplayerSpawner or peers won't receive them" — 场景复制核心原则
|
||||
> "MANDATORY: The server (peer ID 1) owns all gameplay-critical state — position, health, score, item state" — 核心权威模型原则
|
||||
> "`@rpc(\"any_peer\")` allows any peer to call the function — use only for client-to-server requests that the server validates" — RPC 安全性核心规则
|
||||
> "Don't `add_child()` networked nodes manually — use MultiplayerSpawner or peers won't receive them" — 场景生成关键约束
|
||||
> "Test under latency: It works on localhost — test it at 150ms before calling it done" — 延迟测试标准
|
||||
|
||||
## Key Concepts
|
||||
- [[MultiplayerAPI]]:Godot 4 核心网络 API,提供 `set_multiplayer_authority()`、`is_multiplayer_authority()`、RPC 调用和多人信号管理
|
||||
- [[Server-Authoritative Model]]:服务器权威模型 — 所有游戏关键状态由服务器持有权威,客户端发送输入请求,服务器验证后更新状态,防止作弊
|
||||
- [[RPC(Remote Procedure Call)]]:远程过程调用,通过 `@rpc()` 装饰器声明函数调用模式(any_peer/authority/call_local),实现跨网络的过程调用
|
||||
- [[MultiplayerSynchronizer]]:属性同步器 — 广播权威节点属性变更到所有对端,支持 ON_CHANGE 模式避免每帧同步
|
||||
- [[MultiplayerSpawner]]:场景生成器 — 在权威节点自动生成子场景并复制到所有对端,是动态生成网络节点的唯一正确方式
|
||||
- [[ENet]]:可靠 UDP 传输层,支持服务器/客户端两种模式,用于桌面平台的生产级网络连接
|
||||
- [[WebRTC]]:Web 实时通信协议,通过 `WebRTCPeerConnection` + `WebRTCMultiplayerPeer` 实现浏览器端 P2P 多人游戏和 NAT 穿透
|
||||
- [[Authority Model]]:权威模型 — 每个网络节点有且只有一个权威持有者(peer ID),只有权威才能修改该节点的关键状态
|
||||
- [[RPC Security Pattern]]:RPC 安全模式 — 所有 `any_peer` RPC 函数必须进行发送者 ID 验证和输入合理性检查,防止客户端作弊
|
||||
- [[MultiplayerAPI]]:Godot 4 的核心多人游戏 API,管理网络连接、权威和 RPC 通信
|
||||
- [[Server-Authoritative Architecture]]:服务器权威架构——所有游戏逻辑在服务器执行,客户端仅发送输入和接收状态
|
||||
- [[RPC (Remote Procedure Call)]]:远程过程调用,通过 `@rpc()` 装饰器实现节点间的跨网络方法调用
|
||||
- [[MultiplayerSpawner]]:Godot 4 组件,自动在所有对等节点间复制动态生成的网络节点
|
||||
- [[MultiplayerSynchronizer]]:Godot 4 组件,将权威节点的状态变化同步到所有对等节点
|
||||
- [[ENet]]:轻量级 UDP 可靠传输协议,用于 Godot 的 C/S 和 P2P 网络连接
|
||||
- [[WebRTC]]:用于浏览器导出的 P2P 多人大规模连接方案,配合 STUN/TURN 实现 NAT 穿透
|
||||
- [[Authority Model]]:权威模型——每个网络节点有唯一的权威持有者(服务器或特定客户端),只有权威才能修改状态
|
||||
- [[Scene Replication]]:场景复制——通过网络同步动态生成/销毁的节点及其状态
|
||||
- [[Delta Compression]]:增量压缩——仅传输变化的字段而非完整状态,节省带宽
|
||||
|
||||
## Key Entities
|
||||
- [[Godot 4]]:开源游戏引擎,版本 4.x 引入了 MultiplayerAPI、MultiplayerSpawner、MultiplayerSynchronizer 构成完整的场景复制体系
|
||||
- [[Nakama]]:开源游戏服务器,用于 Godot 多人游戏的 matchmaking、大厅、排行榜和 DataStore 集成
|
||||
- [[Godot]]:开源游戏引擎,版本 4 提供了全新的多人游戏 API(MultiplayerAPI、MultiplayerSpawner、MultiplayerSynchronizer)
|
||||
- [[Nakama]]:(提及)开源游戏服务器,可与 Godot 集成提供匹配、大厅、排行榜和 DataStore 功能
|
||||
- [[NetworkManager]]:(代码中的 Autoload 示例)管理 ENet 服务器/客户端创建、连接和断开的核心网络管理器
|
||||
- [[Player]]:(代码中的节点示例)服务器权威的玩家角色节点,通过 RPC 接收输入、同步状态
|
||||
|
||||
## Connections
|
||||
- [[godot-gameplay-scripter]] ← extends ← [[godot-multiplayer-engineer]](多人游戏建立在 Godot 游戏逻辑脚本基础上)
|
||||
- [[godot-shader-developer]] ← parallel ← [[godot-multiplayer-engineer]](同属 Godot Game Dev 部门的不同专精方向)
|
||||
- [[unity-multiplayer-engineer]] ← parallel ← [[godot-multiplayer-engineer]](跨引擎多人游戏实现,核心概念一致但 API 不同)
|
||||
- [[Unity Multiplayer Engineer]] ← similar_concept ← [[Godot Multiplayer Engineer]]
|
||||
- 两者都遵循服务器权威模型和 RPC 安全模式,但各自使用不同引擎的原生 API
|
||||
- [[Game Designer]] ← documents_requirements ← [[Godot Multiplayer Engineer]]
|
||||
- Game Designer 定义的多人游戏需求由 Multiplayer Engineer 实现网络同步方案
|
||||
- [[Technical Artist]] ← coordinates_with ← [[Godot Multiplayer Engineer]]
|
||||
- 技术美工需要了解网络同步对视觉效果的影响(如预测、插值)
|
||||
|
||||
## Contradictions
|
||||
- 与 [[unity-multiplayer-engineer]] 在权威模型实现细节上有差异:
|
||||
- 冲突点:Unity 使用 NetworkTransform/NetworkVariable 隐式同步,Godot 使用 MultiplayerSynchronizer 显式配置
|
||||
- 当前观点:Godot 的显式权威模型(每节点 `set_multiplayer_authority()`)更透明,开发者对状态归属有完全控制
|
||||
- 对方观点:Unity 的隐式同步减少模板代码,但在复杂场景下权威归属不如 Godot 明确
|
||||
```
|
||||
- 与 [[Unity Multiplayer Engineer]] 冲突:
|
||||
- 冲突点:权威模型的具体实现细节
|
||||
- 当前观点(Godot):使用 `set_multiplayer_authority(peer_id)` 显式设置权威,每个节点独立管理
|
||||
- 对方观点(Unity):通过 NetCode/MLAPI 的 NetworkObject 和 Owner 机制管理权威
|
||||
- 说明:两者核心原则一致(服务器权威、RPC 验证),但实现 API 不同,不构成实质冲突
|
||||
|
||||
Reference in New Issue
Block a user