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+ 个边缘云位置(了解更多)。每个服务器都会部署在最适合其玩家的可用位置,并且仅在其运行期间计费。
完整指南:通过 Unity 引擎集成指南 将 Edgegap 添加到您自己的 Unity 游戏中
平台:Linux 专用服务器。已测试客户端:Windows。上游游戏支持 Android、iOS 和 macOS,但尚未在 Edgegap 上进行测试。原游戏由 Unity Technologies 提供,遵循 Unity Companion License。
工作原理
玩家点击 Find Match。客户端向 Edgegap 撮合机制发送单人票据(ticket),无需登录 Unity Gaming Services。
撮合机制将玩家分组到配置文件
metro(一个 2 到 150 人的队伍)中,并为比赛启动 Edgegap 部署。服务器启动,在 UDP 端口 7979 上监听并跳过 UGS 会话。每个客户端获取服务器的 IP 和外部端口,进行连接并发送其票据 ID,以便服务器统计席位。
当尚有空闲席位时,服务器会保持回填票据开启。随后搜索的玩家会被发送到该运行中的服务器,而不是新服务器。
当没有剩余玩家时,服务器关闭其回填并停止自身的部署,从而结束计费。
该分支修改的内容:
路径 | 功能描述 |
|---|---|
| 读取 Edgegap 注入到部署中的内容,以及客户端的直连目标。 |
| 服务器端:当无人加入或所有人离开时停止部署。 |
| 客户端:排队单人票据并返回服务器的 IP 和端口。 |
| 服务器端:在有空位时保持回填开启,并将连接与票据相匹配。 |
| 撮合 URL、身份验证令牌、配置文件以及回填限制,由客户端和服务器共享。 |
| 挂钩:在 Edgegap 上跳过 UGS 会话。 |
| 挂钩:Find Match 使用 Edgegap 撮合机制,或直接连接到服务器。 |
| Tools → Edgegap → Build Linux Dedicated Server,亦可从命令行运行。 |
| 服务器镜像和撮合配置。 |

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 上运行:
服务器在 Edgegap 上跳过 UGS。当设置了
ARBITRIUM_REQUEST_ID变量时,服务器在启动时将不使用 UGS 会话(ServerManager.cs、EdgegapEnvironment.cs)。服务器自动停止。当没有玩家加入或所有玩家都已离开时,服务端世界系统(server-world system)会调用
ARBITRIUM_DELETE_URL(EdgegapServerLifecycleSystem.cs)。“寻找比赛”(Find Match)使用 Edgegap 匹配系统。客户端通过 Edgegap Unity SDK 排队获取票据,并将返回的 IP 和端口传递给游戏现有的连接流程(
EdgegapMatchmakerClient.cs、MatchMakingConnector.cs)。运行中的服务器持续补充玩家。当有空位时,服务端世界系统会保持回填(backfill)开启状态,客户端连接后会通过 RPC 发送其票据 ID(
EdgegapBackfillSystem.cs、EdgegapTicketRpc.cs)。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 上进行测试。
将
matchmaker-config.json中的application.version设置为您的应用版本。配置文件metro是一个由 2 到 150 名玩家组成的团队。两名一起搜索的玩家在排队约 10 秒后会获得一个服务器,而单独的玩家在 30 秒后会获得一个。这适用于测试;对于真正的比赛,请提高最低要求。在控制面板中,打开 Matchmaker,选择创建 Matchmaker,上传
matchmaker-config.json,然后选择创建并启动。当其状态为在线时,将 API URL 和身份验证令牌 (Auth Token) 复制到
Assets/Resources/EdgegapMatchmakerSettings.asset中。身份验证令牌可以安全地随客户端一起发布:它不会提供对您 Edgegap 账户的访问权限。重新构建服务器和客户端。两者都会读取此资产:客户端用于寻找对局,服务器用于创建回填补位。然后推送新标签并创建新的应用版本。
在客户端中点击寻找比赛。状态会变为“正在搜索...”、“已找到比赛,正在启动服务器...”,然后客户端连接。批处理模式客户端(-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 的工作室案例研究。

《以太之战 2》完美的全球发布
Aether Studios
了解Aether Studios是如何快速添加Edgegap并向他们的社区交付完美的启动和后启动服务的。
Case Study

克服因虚拟现实在竞技Multiplay中使用WiFi而引入的延迟
Halfbrick Studios
Discover how Halfbrick successfully launched & maintains a multiplayer-focused Early Access on META Quest's VR platform.
Case Study

MENA的社交应用添加了在线游戏
WOLF
了解这款在中东和北非地区广受欢迎的社交应用如何轻松地将 matchmaking 和多人游戏编排添加到 WOLF Qanawat。
Case Study

混合编排让开球策略随时应对任何流量做好准备
Birch Games
混合编排如何帮助 Birch Games 应对流量——将免流出费用的 Fleets 与无区域限制云相结合。
Case Study

7天血月
The Fun Pimps & iLLOGIKA
了解 Illogika 如何大幅降低服务器成本,并确保提供《七日杀 (7 Days to Die)》玩家所期望的在线体验。
Case Study

真实的在线战争需要终极的协调
Highwire Games
了解Highwire对性能的需求如何需要只有Edgegap才能提供的编排。
Case Study

22,000 条评价、4.8 颗星以及自动扩展的基础架构
Sinn Studios
一个由 Slack 提供支持的简单集成,如何让 Sinn Studio 的热门 VR 游戏快速上线并保持稳定运行。
Case Study

动态服务器编排
Under NDA - AAA Studio
了解世界上最大的AAA工作室之一如何通过边缘计算改善其对等多人游戏体验。
Case Study

对于 AAA 格斗游戏的近零延迟
AAA Studio - Under NDA
一个未宣布的项目如何实现了最低延迟,并改善了其1v1游戏中的公平性。
Case Study

Play Gods with Multiplayer Physics
Squido Studio
Learn how Squido uses Edgegap's highligh optimized game servers to deliver mind-bending & chaotic VR gameplay.
Case Study

全面托管的解决方案为独立游戏节省时间 多人VR恐怖游戏
Dirty Pearl Studios
了解Dirty Pearl Studios如何通过Edgegap的轻松集成和自动编排,以及其Nakama集成,节省了开发时间。
Case Study

即时全球服务器部署以促进协作式XR医学教育
AlensiaXR
AlensiaXR如何利用Edgegap为全球医学生提供低延迟、始终可用的共享解剖课程。
Case Study

守光人:具有专用服务器的 VR 社交合作游戏
Spectral Games
Spectral Games 如何在无需任何服务器经验的情况下,利用 Edgegap Matchmaking 和 Server Browser 为其 VR 社交大厅启动专用服务器。
Case Study

全球范围内快速可靠的部署,适用于PvPvE挑战者Gravebound
Crater Studios
Edgegap 的调度和配对如何帮助 Crater Studios 使他们能够将重心从基础设施转移到游戏玩法上。
Case Study

快速扩展网络元宇宙
Hiber
了解Hiber如何通过Edgegap消除服务器容量规划中的猜测。
Case Study

高硬件要求和自定义游戏服务器池
Alderon Games
了解Alderon Games如何瞬间利用全球多个供应商的自定义游戏服务器池来支持其热门MMO。
Case Study

独立开发者的简单集成
WhaleFood Games
阅读关于WhaleFood Games如何使用Edgegap解决其网络代码问题的文章。
Case Study

推动东南亚首款电子竞技游戏的尖端技术。
Anantarupa Studios
了解Edgegap如何通过一个无缝解决方案简化复杂基础设施和尖端技术,从而改变东南亚的游戏格局。
Case Study

一次打击。全球抵达。
Triple Hill Interactive
Triple Hill Interactive如何利用Edgegap的编排来提供低延迟,并提高在每毫秒都至关重要的游戏类型中的公平性。
Case Study

快节奏团队大逃杀...带着枪的动物毛绒玩具!
SANDYFLOOR
了解一家韩国独立工作室是如何将其多人游戏发布到全球的。
Case Study

移动端赛马游戏凭借即时、高效能的服务器走向全球
Mirai Labs
看 Mirai Labs 如何通过即时服务器部署和细分 vCPU 来运行 Pegaxy Blaze 的全球多人竞速游戏,从而将单个玩家的成本保持在极低水平。
Case Study

服务器管理与分发
Matrioshka Games
阅读关于Matrioshka Games如何在资源有限的情况下发布早期访问的战斗 Royale。
Case Study

听我的信号,释放地狱!
TyGames
探索独立工作室TyGames如何让玩家沉浸在第三人称角斗士战斗的多人游戏中。
Case Study

瞬时全球编排
Soliton Interactive
探索Soliton Interactive如何做到了不可能……首次推出可多人玩的版本!
Case Study

竞技游戏具有服务器端物理引擎,确保理想的低于50毫秒的延迟
NS7
了解为什么仅有Edgegap能够使独立工作室通过服务器端物理和权限实现其AAA质量的免费游戏体育玩法愿景。
Case Study

iGaming的区域部署
X1 Contra 1
X1 Contra 1 通过经济高效的托管和区域部署,为其巴西玩家提供实时 PvP 休闲游戏,确保数据和法律合规。
Case Study

仅在玩家游玩时付费:经济实惠的多人游戏基础设施
Meltdown Interactive
Edgegap 如何帮助独立开发商 Meltdown Interactive Media 在无需复杂方案的情况下,以高性价比解决扩缩容和匹配问题,从而让他们能够专注于游戏开发。
Case Study

同一个 Edgegap 平台,三种截然不同的网络配置
Warped Games
了解 Warped Games 如何在同一个 Edgegap 部署 API 和同一个容器管线上运行社交中心、实时合作以及回合制合作。
Case Study

台球大师巡回赛Max
RETA Games
Case Study

韩国的Web3 POP提取射击游戏走向全球,即刻启程
NDUS Entertainment
XOCIETY 如何轻松地添加 Edgegap 编排并集成自定义 matchmaking,与 Edgegap Ping Beacons 一起优化延迟。
Case Study

Multiplayer in Every Dimension
Arcadia.tv
Discover how Arcadia.tv uses Edgegap's edge network to deliver an innovative, team and location-based athletic VR sport.
Case Study

F2P 移动格斗游戏利用即时(Just-In-Time)服务器降低基础设施成本
Game Changers Worldwide
Game Changer Worldwide 如何在全球移动端托管 Rumble Rush 的实时 3v3 PvP 游戏。
Case Study
他们选择 Edgegap 的关键原因
了解 Edgegap 自动化游戏服务器编排如何带来无缝的多人游戏体验。









