了解Edgegap的工作原理

了解Edgegap的工作原理

/

/

Megacity Metro (Mobile)

Unity Engine

Megacity Metro (Mobile)

部署至 Edgegap

已发布

已发布

已发布

Megacity Metro(移动端):在 Edgegap 专属服务器上运行 Unity 面向实体的 Netcode 射击游戏,并支持匹配

Megacity Metro(移动端):在 Edgegap 专属服务器上运行 Unity 面向实体的 Netcode 射击游戏,并支持匹配

Megacity Metro 是 Unity 的多人射击游戏示例:一场比赛中最多可容纳 150 名玩家穿梭于城市之中,基于 Netcode for Entities (DOTS/ECS) 构建。在上游,它运行在 Unity Gaming Services 上。Edgegap 的分支则在 Edgegap 上运行其专用服务器,并通过 Edgegap 撮合机制(matchmaker)寻找比赛。

游戏的网络代码没有改变:相同的服务器权威 Netcode for Entities、相同的预测和延迟补偿机制。 该分支添加了几个 Edgegap 文件和两个小型挂钩(hook)。如果将 Edgegap 设置留空,游戏的表现将与上游完全一致。

玩家点击 Find Match,撮合机制会启动一个专用服务器,随后进行搜索的玩家通过回填(backfill)加入该运行中的服务器,每个服务器最多可容纳 150 人。当没有玩家进行游戏时,服务器会自动停止其自身的部署。

移动端状态,2026 年 10 月 21 日:手机端通过 Find Match 加入,因为移动端发布版本隐藏了直接连接(Connect)选项。该撮合路径有效,并且已使用 Windows 客户端进行过测试。Android 和 iOS 版本尚未在 Edgegap 上进行测试。

Edgegap 的网络覆盖 615+ 个边缘云位置(了解更多)。每个服务器都会部署在最适合其玩家的可用位置,并且仅在其运行期间计费。

平台:Linux 专用服务器。已测试客户端:Windows。上游游戏支持 Android、iOS 和 macOS,但尚未在 Edgegap 上进行测试。原游戏由 Unity Technologies 提供,遵循 Unity Companion License。

工作原理

  1. 玩家点击 Find Match。客户端向 Edgegap 撮合机制发送单人票据(ticket),无需登录 Unity Gaming Services。

  2. 撮合机制将玩家分组到配置文件 metro(一个 2 到 150 人的队伍)中,并为比赛启动 Edgegap 部署。

  3. 服务器启动,在 UDP 端口 7979 上监听并跳过 UGS 会话。每个客户端获取服务器的 IP 和外部端口,进行连接并发送其票据 ID,以便服务器统计席位。

  4. 当尚有空闲席位时,服务器会保持回填票据开启。随后搜索的玩家会被发送到该运行中的服务器,而不是新服务器。

  5. 当没有剩余玩家时,服务器关闭其回填并停止自身的部署,从而结束计费。

该分支修改的内容:

路径

功能描述

Assets/Scripts/Gameplay/Mix/Multiplayer/Edgegap/EdgegapEnvironment.cs

读取 Edgegap 注入到部署中的内容,以及客户端的直连目标。

Assets/Scripts/Gameplay/Mix/Multiplayer/Edgegap/EdgegapServerLifecycleSystem.cs

服务器端:当无人加入或所有人离开时停止部署。

Assets/Scripts/Gameplay/Mix/Multiplayer/Edgegap/EdgegapMatchmakerClient.cs

客户端:排队单人票据并返回服务器的 IP 和端口。

Assets/Scripts/Gameplay/Mix/Multiplayer/Edgegap/EdgegapBackfillSystem.cs, EdgegapTicketRpc.cs

服务器端:在有空位时保持回填开启,并将连接与票据相匹配。

Assets/Scripts/Gameplay/Mix/Multiplayer/Edgegap/EdgegapMatchmakerSettings.cs, Assets/Resources/EdgegapMatchmakerSettings.asset

撮合 URL、身份验证令牌、配置文件以及回填限制,由客户端和服务器共享。

Assets/Scripts/Gameplay/Mix/Multiplayer/SDK/Server/ServerManager.cs

挂钩:在 Edgegap 上跳过 UGS 会话。

Assets/Scripts/Gameplay/Mix/UI/MonoBehaviours/Matchmaker/MatchMakingConnector.cs

挂钩:Find Match 使用 Edgegap 撮合机制,或直接连接到服务器。

Assets/Edgegap/Editor/EdgegapServerBuild.cs

Tools → Edgegap → Build Linux Dedicated Server,亦可从命令行运行。

Dockerfile, .dockerignore, matchmaker-config.json

服务器镜像和撮合配置。

无需信用卡。免费版包含部署真实游戏服务器所需的资源。

无需信用卡。免费版包含部署真实游戏服务器所需的资源。

Megacity Metro skyline at dusk, with a flying vehicle near a glowing tower, and the Unity logo.

Unity 的 Megacity Metro,一款基于 Netcode for Entities 的射击游戏,其服务器部署在 Edgegap 上。

分步指南

运行示例

1. 开始之前

  • 一个免费的 Edgegap 账户。测试无需信用卡。

  • Unity 6000.1.0f1,包含 Linux Build Support (IL2CPP)、Linux Build Support (Mono) 和 Linux Dedicated Server Build Support,以及适用于您客户端平台的模块(针对所测试的客户端为 Windows Build Support (IL2CPP))。

  • Docker Desktop,且处于运行状态。

  • Git LFS,需在克隆之前安装:该项目包含约 415 MB 的 LFS 内容。请预留充足时间:Unity 指出,首次克隆、首次打开项目以及首次构建各可能需要 20 到 50 分钟。

  • 克隆该 分支 (fork)。下载 ZIP 压缩包的方式不适用于该项目。

Git:Unity 需要在您的 PATH 环境变量中配置 Git 客户端(2.14.0 或更高版本),以便从 Git URL 安装程序包(例如 Edgegap 插件)。macOS 通常已预装(Xcode 命令行工具);在 Windows 上,请安装 Git。

2. 构建服务器并推送镜像

在 Unity 编辑器中关闭项目,然后从项目根目录构建 Linux 专用服务器:

Unity -batchmode -quit -buildTarget Linux64 -standaloneBuildSubtarget Server -projectPath . -executeMethod EdgegapServerBuild.Build -logFile build.log

保留 -buildTarget Linux64 -standaloneBuildSubtarget Server:如果没有它们,Entities 内容构建将失败并提示“Unable to build with the current configuration”(无法使用当前配置进行构建)。您也可以在编辑器中使用工具 (Tools) → Edgegap → 构建 Linux 专用服务器 (Build Linux Dedicated Server)。

构建产物位于 Builds/EdgegapServer/(约 3.4 GB,大部分为调试文件)。该分支的 .dockerignore 忽略了这些文件,因此镜像大小约为 537 MB。

使用 Container Registry 页面中的用户名和令牌登录,然后每次使用新标签进行构建和推送:

docker login registry.edgegap.com

docker build --platform linux/amd64 -t registry.edgegap.com/<project>/megacity-metro:<tag> .

docker push registry.edgegap.com/<project>/megacity-metro:<tag>

3. 创建应用版本

在控制面板中,创建应用程序 megacity-metro 以及适用于您的镜像的版本:

  • 镜像 <project>/megacity-metro、您的标签,以及您的注册表用户名和令牌。如果没有它们,部署将无法拉取镜像。

  • 1 个 vCPU 和 2 GB,此为经过测试的规格大小。空闲服务器大约占用 18% 的 CPU 和 323 MB 内存。

  • 一个端口:名称为 gameport,7979,UDP。

版本上的可选环境变量:EDGEGAP_FIRST_PLAYER_TIMEOUT_S 和 EDGEGAP_EMPTY_TIMEOUT_S(自动停止计时器)、EDGEGAP_MAX_PLAYERS 和 EDGEGAP_MAX_OPEN_BACKFILLS(回填限制),以及用于额外服务器参数的 UNITY_COMMANDLINE_ARGS。

4. 使用桌面客户端测试服务器

在添加配对系统(matchmaker)之前,先验证服务器是否正常工作。从控制面板(dashboard)部署该版本,选择距离您较近的位置。服务器日志会显示 Running on Edgegap ... skipping UGS sessions。

使用部署的主机地址和外部端口(位于部署页面;不是 7979)启动桌面客户端:

<client executable> -edgegapConnect <host>:<external port>

或者在启动前设置 EDGEGAP_CONNECT=<host>:<external port>。主机地址可以是 IP 或 FQDN。有了直连目标后,客户端会跳过 UGS 登录,且不需要 UGS 项目。当您加入时,服务器日志会记录 [Edgegap] Connected players: 1。

直连仅用于桌面端测试:移动端发布版本会隐藏 Connect 选项,因此手机使用的是 Find Match(步骤 6)。

如需快速构建 Windows 测试客户端,请使用 Mono 而不是 IL2CPP(IL2CPP Master 构建耗时约 40 分钟,并占用 12 GB 内存):

Unity -batchmode -quit -projectPath . -executeMethod EdgegapServerBuild.BuildClient -edgegapClientTarget win64 -edgegapClientMono -buildTarget Win64 -standaloneBuildSubtarget Player -logFile client.log

输出文件将保存在 Builds/Client/win64-mono/ 中。在服务器构建之后,请保留 -standaloneBuildSubtarget Player,否则构建会失败并提示“script class layout is incompatible”。

完成后请停止部署。免费层同时仅支持运行一个部署。

5. 将其添加到你自己的 Netcode for Entities 游戏中

该分支是一个可用的参考:您的编码智能体(coding agent)可以直接复制其经过测试的文件,而无需从头编写。通过以下五处改动,即可让 Netcode for Entities 游戏在 Edgegap 上运行:

  1. 服务器在 Edgegap 上跳过 UGS。当设置了 ARBITRIUM_REQUEST_ID 变量时,服务器在启动时将不使用 UGS 会话(ServerManager.cs、EdgegapEnvironment.cs)。

  2. 服务器自动停止。当没有玩家加入或所有玩家都已离开时,服务端世界系统(server-world system)会调用 ARBITRIUM_DELETE_URL(EdgegapServerLifecycleSystem.cs)。

  3. “寻找比赛”(Find Match)使用 Edgegap 匹配系统。客户端通过 Edgegap Unity SDK 排队获取票据,并将返回的 IP 和端口传递给游戏现有的连接流程(EdgegapMatchmakerClient.cs、MatchMakingConnector.cs)。

  4. 运行中的服务器持续补充玩家。当有空位时,服务端世界系统会保持回填(backfill)开启状态,客户端连接后会通过 RPC 发送其票据 ID(EdgegapBackfillSystem.cs、EdgegapTicketRpc.cs)。

  5. Linux 服务器构建和镜像。Assets/Edgegap/Editor/EdgegapServerBuild.cs 负责构建服务器;该分支的 Dockerfile 和 .dockerignore 可确保调试文件不包含在镜像中。

然后按照步骤 3 和步骤 6 创建应用版本和匹配系统。

配合您的智能体使用:

“加载 edgegap 技能,然后加载 edgegap-unity。我的游戏使用 Netcode for Entities。以 github.com/edgegap/netcode-game-sample-unity-dots-ecs-mobile-megacity-metro 为参考,添加一个在服务器为空时停止 Edgegap 部署的服务端世界系统,让‘寻找比赛’通过 Edgegap 匹配系统排队并连接到返回的地址,添加通过 RPC 发送票据 ID 的服务器回填功能,并将 Linux 专用服务器构建到该分支的 Dockerfile 中。”

Edgegap 的技能目前还没有 Netcode for Entities 模板:edgegap-unity 涵盖了 Unity 工作流,而该分支的 ECS 系统则是网络代码部分的参考。

有关手动的详细步骤,请参阅 Unity Engine 集成指南。

6. 使用 Edgegap 匹配系统寻找对局

这是手机使用的路径。它于 2026 年 10 月 21 日在 Windows 客户端上进行了测试,尚未在 Android 或 iOS 上进行测试。

  1. 将 matchmaker-config.json 中的 application.version 设置为您的应用版本。配置文件 metro 是一个由 2 到 150 名玩家组成的团队。两名一起搜索的玩家在排队约 10 秒后会获得一个服务器,而单独的玩家在 30 秒后会获得一个。这适用于测试;对于真正的比赛,请提高最低要求。

  2. 在控制面板中,打开 Matchmaker,选择创建 Matchmaker,上传 matchmaker-config.json,然后选择创建并启动。

  3. 当其状态为在线时,将 API URL 和身份验证令牌 (Auth Token) 复制到 Assets/Resources/EdgegapMatchmakerSettings.asset 中。身份验证令牌可以安全地随客户端一起发布:它不会提供对您 Edgegap 账户的访问权限。

  4. 重新构建服务器和客户端。两者都会读取此资产:客户端用于寻找对局,服务器用于创建回填补位。然后推送新标签并创建新的应用版本。

在客户端中点击寻找比赛。状态会变为“正在搜索...”、“已找到比赛,正在启动服务器...”,然后客户端连接。批处理模式客户端(-batchmode -nographics)会自动进行匹配。

回填补位(中途加入)。每个票证都带有 backfill_group_size 属性:客户端发送 ["new", "1"](新比赛,或正在运行的服务器上的一个空位),服务器发送 ["1"]。服务器给每位匹配到的玩家 60 秒的时间进行连接,只要有空位就最多保持 3 个回填开放,并在停止运行之前关闭所有回填。

自行停止。如果在启动后 300 秒内没有任何玩家连接,或者在最后一名玩家离开 60 秒后,服务器将停止其部署。已匹配但仍在连接中的玩家将使服务器保持运行。

在免费层级上,撮合系统(matchmaker)在每次启动 3 小时后停止;您可以从控制面板重新启动它(其 URL 和令牌保持不变)。当您发布新的服务器版本时,请在撮合系统中更新 application.version(停止、编辑、启动)。

已知限制

  • 手机端尚未进行测试。Android 和 iOS 版本应该可以通过“寻找比赛”(Find Match,即通过 Windows 客户端测试的路径)连接到 Edgegap,但目前尚未有手机加入过 Edgegap 服务器。窗口化桌面测试也尚未进行;已测试的客户端均在无外设(headless)模式下运行。

  • 无票据验证。服务器会记录未提供票据的连接,但仍会允许其进入。

  • 外部停止后回填仍然存活。如果部署是通过仪表板、API 或达到最大持续时间而停止的,服务器退出时不会关闭其回填。在长达 5 分钟的时间内,它们可能会将玩家发送到已停止的服务器;该玩家的连接将超时,但下一次“寻找比赛”将恢复正常。

  • Vivox 和 UGS 登录未受影响。Edgegap 路径不使用它们,游戏内“连接”模式的会话浏览器仍会列出 UGS 会话。

测试了什么

在 Edgegap 上使用 Unity 6000.1.0f1 以及配置为 1 vCPU / 2 GB 的应用版本在 7979/UDP 上进行了测试。客户端为 Windows 构建版本,以无头模式运行(-batchmode -nographics)。

  • 2026年10月20日,直连:一个 Windows IL2CPP 客户端使用 -edgegapConnect 连接,服务器记录了该玩家的加入。在没有玩家时(1502 秒,超时设置为 1500 秒)以及客户端退出约 60 秒后,部署自行停止。

  • 2026年10月21日,匹配系统(免费层级,配置文件 metro):两个 Windows 客户端(Mono 构建版本)一同排队,在同一部署中先后获得 MATCH_FOUND 和 HOST_ASSIGNED,并且均成功连接。第三个客户端通过补位(backfill)直接从 SEARCHING 变为该运行中部署的 HOST_ASSIGNED 并加入。在所有三者退出后,部署自行停止。

  • 本地测试(Docker 中的服务器,模拟 Edgegap 变量,真实匹配系统):当没有匹配的玩家在 60 秒内连接时,席位被释放,补位关闭。

  • 未测试:Android、iOS 和 macOS 客户端。

常见问题

关于在 Edgegap 上运行 Unity 的 Megacity Metro 和 Netcode for Entities 的疑问。

Netcode for Entities 可以在 Edgegap 专属服务器上运行吗?

是的。针对 Linux Dedicated Server(Linux 专用服务器)目标构建游戏,并在 Edgegap 上的容器中运行它。Megacity Metro 的服务器在 Edgegap 上运行,其网络代码保持不变:该分支仅添加了几个 Edgegap 文件和两个小型挂钩(hooks)。

Megacity Metro 示例可以在移动设备上与 Edgegap 配合使用吗?

尚未测试。手机通过“寻找比赛”(Find Match)加入,该功能现已使用 Edgegap 匹配机制,并可与 Windows 客户端协同工作。Android 和 iOS 版本目前尚未加入过 Edgegap 服务器。

玩家可以加入已经开始的巨型都市地铁比赛吗?

是的,通过回填功能。当服务器有空闲席位时,它会保持 Edgegap 匹配系统的回填票据处于开启状态,因此稍后搜索的玩家可以加入,每台服务器最多可容纳 150 人。

我还需要 Unity Gaming Services 吗?

不用于托管或匹配。在 Edgegap 上,服务器会跳过 UGS 会话,并且“寻找比赛”(Find Match)和直连会跳过 UGS 登录。Vivox 语音聊天仍使用 UGS。

客户

了解更多已接入 Edgegap 的客户案例

提供 31 个从其他平台迁移至 Edgegap 的工作室案例研究。

他们选择 Edgegap 的关键原因

了解 Edgegap 自动化游戏服务器编排如何带来无缝的多人游戏体验。

费用

定价

定价

通过混合编排优化成本与性能

通过混合编排优化成本与性能

通过混合编排优化成本与性能

边缘云

按需

$0.00115

/ vCPU

/ 分钟

按分钟计费,仅按实际使用量收费

只有在玩家在线玩游戏时才需付费。0 个活动服务器 = $0

在全球 615 多个边缘云节点中按实例部署游戏服务器。零承诺。

只需添加信用卡。

边缘云

按需

$0.00115

/ vCPU

/ 分钟

按分钟计费,仅按实际使用量收费

只有在玩家在线玩游戏时才需付费。0 个活动服务器 = $0

在全球 615 多个边缘云节点中按实例部署游戏服务器。零承诺。

只需添加信用卡。

专属物理机集群 (裸金属)

预留容量

$0.0261

/ vCPU

/ 小时

按月计费,始终开启

每个主机每月 $280(12个月标准价),或按月支付每月 $350

通过无出站流量费用的专用机队托管,优化您游戏服务器的成本效益。

持久在线,24/7全天候可用,您的工作室专属。

专属物理机集群 (裸金属)

预留容量

$0.0261

/ vCPU

/ 小时

按月计费,始终开启

每个主机每月 $280(12个月标准价),或按月支付每月 $350

通过无出站流量费用的专用机队托管,优化您游戏服务器的成本效益。

持久在线,24/7全天候可用,您的工作室专属。

您的账单因费率和使用量而异;这可能会根据游戏类型、玩家人数等因素而有所不同。

您的账单因费率和使用量而异;这可能会根据游戏类型、玩家人数等因素而有所不同。

使用我们的预估计算器模拟您的用量 ->

使用我们的预估计算器模拟您的用量 ->

Edgegap 的功能与价格:边缘云与私有集群(Private Fleets)详细对比

Edgegap 的功能与价格:边缘云与私有集群(Private Fleets)详细对比

对比

免费试用

边缘云

Private Fleets

功能特色

分析与监控

账单警报

点击展开

还有 28 行

解锁

在帐户中添加信用卡后,即可解锁各项功能。

对比

免费试用

边缘云

Private Fleets

功能特色

分析与监控

账单警报

点击展开

还有 28 行

解锁

在帐户中添加信用卡后,即可解锁各项功能。

对比

免费试用

边缘云

Private Fleets

功能特色

分析与监控

账单警报

点击展开

还有 28 行

解锁

在帐户中添加信用卡后,即可解锁各项功能。