🧭
版本说明(2026-07):新项目应优先使用 Multiplayer Services SDK 的 Sessions API。它统一协调 Lobby、Relay 与 Netcode,避免手动维护三套独立 SDK。本文以 Unity 6 和 NGO 2.13.x 为基线。

先看结论

这三个系统解决的是不同层次的问题:
系统
负责什么
不负责什么
NGO
同步 GameObject、状态、RPC、所有权和网络场景
房间发现、NAT 穿透、云端大厅
Lobby
玩家分组、房间列表、加入码、元数据和成员关系
实时传输角色位置与战斗数据
Relay
通过中继服务器转发客户端与主机之间的流量
游戏状态权威、反作弊和存档
Sessions
统一编排 Lobby、Relay、NGO 的创建、加入和离开
替你设计具体玩法同步规则

推荐架构

在新版 SDK 中,调用 CreateSessionAsync(...WithRelayNetwork()) 时,上述 Lobby 创建、心跳、Relay 分配、Transport 配置和 NGO 启动由 Sessions 协调。加入方调用 JoinSessionByCodeAsync 后,SDK 同样会处理 Lobby 加入和 NGO 网络连接。

NGO:实时游戏层

NGO 是高层网络库,核心对象包括:
  • NetworkManager:启动和关闭网络会话
  • NetworkObject:让 GameObject 获得网络身份
  • NetworkBehaviour:编写网络行为
  • NetworkVariable<T>:同步持续状态
  • [Rpc]:发送离散事件
  • NetworkTransform:同步 Transform
默认客户端-服务器模型通常是服务器权威:客户端发送意图,服务器验证并修改状态。Relay 不会改变这一点,Host 仍然同时承担服务器和本地客户端职责。

Lobby:组队与发现层

Lobby 保存的是低频会话数据,例如房间名、地图、模式、是否锁定、玩家准备状态。它适合:
  • 通过加入码邀请玩家
  • 浏览公开房间
  • 在开局前交换角色、队伍和准备状态
  • 记录当前成员
不要用 Lobby 属性持续同步位置或生命值。它不是实时游戏传输通道,还受到请求频率限制。

Relay:安全连接层

客户端直连主机经常被 NAT、防火墙和动态公网地址阻断。Relay 让双方主动连接 Unity 的中继节点,由节点转发数据,并避免向其他玩家暴露主机 IP。
Relay 解决的是可连接性和地址隐藏,不是:
  • 权威服务器
  • 防作弊
  • 主机迁移后的世界状态恢复
  • 大规模专用服务器托管

Sessions:新项目的统一入口

Multiplayer Services SDK 将原先独立的 Lobby、Matchmaker、Relay SDK 合并为以 Session 为中心的 API。Session 代表一组在一段游戏期间保持关联的玩家,可以通过加入码、房间列表或匹配加入。
推荐依赖:
  • com.unity.services.multiplayer
  • com.unity.netcode.gameobjects
  • com.unity.multiplayer.playmode(本地多实例测试)
Unity 6 的 Multiplayer Center 可以根据项目需求安装和配置相关包。

一次完整连接发生了什么

  1. 初始化 UGS,并完成玩家认证。
  1. 主机创建带 Relay 网络的 Session。
  1. Sessions 创建 Lobby、启动心跳并申请 Relay。
  1. Sessions 配置 Unity Transport,启动 NGO Host。
  1. 客户端用加入码加入 Session。
  1. Sessions 取得 Relay 数据并启动 NGO Client。
  1. NGO 生成 PlayerObject,同步场景和游戏状态。
  1. 玩家离开时调用 session.LeaveAsync(),让 SDK 清理后端成员与网络模块。

架构选择

适合 Host + Relay

  • 2 到十几人的合作或派对游戏
  • 可以接受主机掉线影响当前对局
  • 希望快速上线,不维护专用服务器

更适合 Dedicated Server

  • 强对抗、重反作弊
  • 长时间持续世界
  • 主机不能拥有额外权力
  • 需要稳定的服务器帧率和公网可用性

常见误区

  • Lobby 不是服务器:它保存成员和元数据,不运行战斗逻辑。
  • Relay 不是专用服务器:它只转发加密连接中的数据包。
  • RPC 不是状态仓库:持续状态用 NetworkVariable 或自定义同步。
  • Host 迁移不等于世界迁移:新主机选举、Relay 重连和 NGO 状态恢复是三个不同问题。
  • 匿名登录不等于正式账号:原型阶段方便,正式项目应绑定平台账号并处理恢复。

系列导航

  1. 🗒️
    Unity 联机架构入门:NGO、Lobby、Relay 各自负责什么
  1. 🗒️
    NGO 入门:NetworkObject、NetworkVariable 与 RPC
  1. 🗒️
    Lobby 教程:用 Multiplayer Sessions 创建、查询和加入房间
  1. 🗒️
    Relay 教程:用 Sessions API 让 NGO 安全连接
  1. 🗒️
    完整实战:从大厅到游戏的 NGO + Lobby + Relay 流程

参考资料