自上而下(Top Down)模板是 Unreal Engine 5 的初学者项目之一:点击即可在小型关卡中移动您的角色。Edgegap 的示例将其转换为多人游戏,其中每场对局都在其专属的专用游戏服务器上运行。
匹配和语音聊天默认都是关闭的:在您开启它们之前,该示例的运行方式与 Unreal 的模板相同,玩家使用 open <IP:port> 加入服务器。与任何 Unreal 多人游戏一样,网络同步由 Unreal 自身的复制(replication)机制处理。
开启 Edgegap 匹配器后,玩家将获得一个“寻找比赛(Find Match)”按钮:游戏会测量他们的延迟(ping),将他们与附近的玩家分在一组,并连接到专为该场对局启动的服务器。开启 EOS 语音聊天后,玩家可以在游戏服务器控制的语音房间中通话:服务器决定谁共享一个房间,因此玩家无法加入未分配给其的频道。
Edgegap 的网络覆盖 615 多个边缘云位置(了解更多)。每台服务器都会部署在最适合其玩家的可用位置,在对局空置时自行停止,并且仅在运行时计费。
完整指南:通过 Unreal Engine 集成指南将 Edgegap 添加到您自己的 Unreal 游戏中
支持平台:Windows 游戏客户端(语音功能也可针对 Mac 构建,未测试)以及 Edgegap 上的 Linux 专用服务器。最近使用基于源码构建的 Unreal Engine 5.5.4 进行了测试;其他 Edgegap Unreal 示例已确认可在 5.8 上运行。基于 Epic 的 Top Down 模板。Edgegap 的代码遵循 MIT 许可协议;其构建所基于的 Unreal Engine 内容仍遵循 Epic 的条款。
工作原理
玩家在菜单地图上选择寻找比赛(Find Match)。游戏会对 Edgegap 的信标进行 ping 测试,并发送包含这些 ping 时间的匹配票证。
匹配器将对同一信标具有相似 ping 值的 2 到 4 名玩家分为一组,然后在他们附近启动 Edgegap 部署。
每个客户端获取服务器的地址和端口,并通过 Unreal 的
ClientTravel进行连接。开启语音功能后,每个玩家使用设备 ID 登录 EOS,并向服务器发送一个 ID 令牌。服务器对其进行验证,从匹配器的队伍数据中选择玩家的房间,并仅向其发回该房间的语音令牌。
当最后一名玩家离开时,服务器会等待 15 秒,然后停止自身部署,从而结束计费。
该示例在模板基础上添加的内容:
路径 | 功能说明 |
|---|---|
| 客户端:信标 ping 测试、匹配票证、等待服务器、连接。 |
| 菜单地图上的寻找比赛(Find Match)/ 取消(Cancel)界面覆盖; |
| 服务器:当由匹配器启动的对局变空时停止部署。 |
| EOS 语音:设置、客户端登录和房间、复制语音组件、服务器的令牌服务。 |
| 专用服务器构建目标。 |
| 服务器镜像和匹配器配置文件。 |

Epic 的自上而下模板,配有专用服务器、可选的匹配系统和 EOS 语音聊天。
1. 开始之前
一个免费的 Edgegap 账户。测试无需信用卡。
从源码构建的 Unreal Engine 5.5,以及 Visual Studio 2022 和适用于 5.5 的 Linux 交叉编译工具链。该示例使用 RunUAT 打包其 Linux 服务器,这需要源码构建。首次构建引擎预计需要 1 到 3 小时,首次打包服务器大约需要 1 小时。Unreal Engine 指南涵盖了相关设置,以及使用 Edgegap 的 Docker Extension 的更快捷途径(该示例尚未对此进行测试)。
Docker Desktop,用于构建服务器镜像。
仅限语音聊天:Epic 开发者门户中的产品。
克隆该示例。Unreal 项目位于
MultiplayerGame文件夹中。
2. 将游戏服务器部署在 Edgegap 上
将 Linux 专用服务器打包到仓库根目录下的 Packaged/ 中:
<UE_ROOT>/Engine/Build/BatchFiles/RunUAT.bat BuildCookRun -project=<PATH>/MultiplayerGame/MultiplayerGame.uproject -noP4 -server -noclient -serverplatform=Linux -serverconfig=Development -build -cook -stage -pak -archive -archivedirectory=<PATH>/Packaged
使用来自容器注册表页面的用户名和令牌将 Docker 登录到您的 Edgegap 注册表。然后从仓库根目录构建并推送镜像,每次构建都使用一个新标签:
docker build --platform linux/amd64 -t registry.edgegap.com/<project>/unreal-topdown:v1 .
docker push registry.edgegap.com/<project>/unreal-topdown:v1
在仪表板中,创建一个应用程序(匹配器配置文件需要 unreal-topdown)和一个版本 v1:
您的镜像和标签,以及您的注册表凭据。如果没有这些凭据,部署将失败并提示“Unable to pull image from registry”。
一个端口:名称为
gameport,7777,UDP。
Dockerfile 会直接运行服务器二进制文件,并带有 -stdout -FullStdOutLogOutput 参数,以便其日志显示在仪表板中,并在 Edgegap 结束部署时正常停止。
3. 在测试服务器上进行游戏
在仪表板中打开您的应用版本,选择部署(Deploy)并挑选一个靠近您的位置。当状态变为就绪(Ready)时,复制主机(Host)和外部端口(External Port)。
运行游戏,使用 ` 键打开控制台并输入:
open <host>:<external port>
每次部署时外部端口都会更改。以相同的方式运行第二个客户端,两名玩家就可以在同一关卡中走动了。
手动部署的服务器绝不会自动停止:完成后请在控制台中将其停止。免费套餐一次只能运行一个部署,因此遗忘的测试服务器会阻塞玩家匹配。
4. 添加 EOS 语音聊天(可选)
游戏服务器充当 EOS Voice 的受信任服务器。它通过 HTTPS 调用 EOS Voice Web API,因为 EOS SDK 在 Linux 上不支持语音。玩家使用设备 ID 登录,因此不需要 Epic 账户。
在 Epic 开发者门户中,打开您的产品,然后进入产品设置(Product Settings)。记下产品 ID、沙盒 ID 和部署 ID。在客户端(Clients)选项卡上,添加两个客户端策略,并为每个策略各添加一个客户端:
游戏客户端:类型为
GameClient,勾选需要用户(User required),无 Voice 权限。受信任服务器:自定义策略,取消勾选需要用户(User required),包含 Voice 操作
createRoomToken、kick和mute。该客户端可以为任何房间创建令牌:切勿将其放入游戏构建版本中。将产品、沙盒和部署 ID 以及游戏客户端的 ID 和密钥放入
MultiplayerGame/Config/UserEngine.ini的[EOSVoiceChat]部分。Git 会忽略该文件。在
MultiplayerGame/Config/UserGame.ini中开启语音:在[/Script/MultiplayerGame.EdgegapVoiceSettings]下设置bEnabled=True。在新的应用版本中,添加包含受信任服务器凭据的环境变量
EOS_VOICE_CLIENT_ID和EOS_VOICE_CLIENT_SECRET(标记为隐藏),以及EOS_VOICE_DEPLOYMENT_ID。设置后,无需重新构建镜像即可在服务器中开启语音。重新打包客户端并运行游戏。在控制台中输入
VoiceMute即可静音或取消静音您的麦克风。
在手动部署的服务器上,整场比赛共用一个房间。使用匹配系统(步骤 6)时,队友共用一个房间。
若要在单台电脑上测试两个客户端,请为第二个客户端添加 -EOSVoiceNewDeviceId,并在第一个客户端记录 Voice: logged into EOS 后再启动它。要在没有麦克风的情况下测试音频,请使用以下参数启动客户端:
-ExecCmds="EOSVoiceChat.FakeAudioInputEnabled 1"
随后另一个客户端将记录 Voice: <id> started talking in room <room>。
5. 将其添加到你自己的 Unreal 游戏中
该示例是一个可运行的参考:您的编码智能体(coding agent)可以直接复制其经过测试的文件,而无需从头编写。这些更改使 Unreal 游戏能够在 Edgegap 上运行:
专用服务器(Dedicated Server)构建。一个 Server 目标(
Source/MultiplayerGameServer.Target.cs)、一个服务器默认地图(Config/DefaultEngine.ini中的ServerMap)以及待烘焙地图列表中的该地图(Config/DefaultGame.ini)。客户端上的“寻找比赛”(Find Match)。
EdgegapMatchmakerSubsystemping 信标、创建票证、等待服务器并进行连接。其设置位于DefaultGame.ini的[/Script/MultiplayerGame.EdgegapMatchmakerSubsystem]部分中。可自动停止的服务器。当匹配系统启动服务器后,一旦比赛中无人,它就会停止其部署(
MultiplayerGameGameMode.cpp)。由服务器决定的语音房间。四个
EdgegapVoice*类、MultiplayerGame.Build.cs中仅适用于 Windows 和 Mac 客户端的 EOS 模块,以及.uproject中仅限 Win64 和 Mac 的EOSVoiceChat插件,以使 Linux 服务器不会加载 EOS SDK。服务器镜像。
Dockerfile将Packaged/LinuxServer复制到一个作为非 root 用户运行的小型 Ubuntu 镜像中。
在该示例中,“寻找比赛”覆盖层和自动停止功能位于玩家控制器(player controller)和游戏模式(game mode)中。在您自己的游戏中,您无需编辑这两者:Edgegap 智能体技能以即插即用子系统的形式提供了相同的逻辑。
配合您的智能体使用:
“加载 edgegap-unreal 技能,然后加载 edgegap-eos-voice。以 github.com/edgegap/game-sample-unreal-engine-topdown 为参考,让我的 Unreal 项目支持专用服务器,添加带有‘寻找比赛’按钮和服务器自动停止功能的 Edgegap 匹配系统,并添加每个匹配队伍一个房间的 EOS 语音聊天。在我向你提供我的匹配系统 URL 和 EOS ID 之前,保持匹配和语音功能禁用,并检查编辑器与 Server 目标是否能正常编译。”
如需了解每个步骤的手动详细操作,请参阅 Unreal Engine 集成指南。
6. 开启“查找匹配”
在仪表板中,打开 Matchmaker 并选择 Create Matchmaker。上传示例的
matchmaker-config.json,并将application.name和application.version更改为您的应用程序和版本,然后点击 Create and Start。当其状态变为 ONLINE 时,复制其 API URL 和 Auth Token。
在
MultiplayerGame/Config/UserGame.ini中,添加[/Script/MultiplayerGame.EdgegapMatchmakerSubsystem]部分,并包含bEnabled=True、MatchmakerUrl="<API URL>"和AuthToken="<Auth Token>"。请将 URL 保留在引号中:若不加引号,Unreal 会在//处将其截断。启动两个客户端,并在 10 秒内在两者中均选择 Find Match。它们将加入同一个服务器。
casual 配置文件匹配 2 到 4 名玩家,这些玩家连接到公共信标的 ping 值需低于 150 毫秒,且相互之间的差距在 100 毫秒以内。10 秒后,它还会接受单个玩家以及高达 250 毫秒的 ping 值,以便您可以单独进行测试。没有匹配成功的票证将在 20 秒后取消:请再次选择 Find Match。
Auth Token 仅允许客户端创建和读取票证,因此随游戏一起发布是安全的。切勿将您的 Edgegap API 令牌放入游戏中。
对于无人值守测试,命令行中的 -FindMatch 会在启动时排队。客户端的启动速度各不相同,因此在进行语音测试时,请改为使用相同的 -FindMatchAt=<unix time> 启动两者:每个客户端都会在该时刻开始排队。
当您发布新的服务器版本时,请将 application.version 指向新版本,否则比赛将继续部署旧版本。有关在您自己的游戏中实现匹配的信息,请参阅 Unreal 匹配。
已知限制
引擎从源码构建。 该示例的打包步骤需要 Unreal 5.5 的源码构建版本。Edgegap 的 Docker 扩展通过启动器安装构建 Unreal 服务器;它应该适用于此示例,但尚未经过测试。
语音在 Windows 和 Mac 客户端上运行。 引擎的 EOSVoiceChat 插件没有 Linux 客户端。Mac 构建版本应该可以运行,尚未经过测试。
每场比赛一个队伍。
casual配置文件只有一个队伍,因此每个匹配的玩家共享一个语音房间。对于两个队伍,在配置文件中添加team_count: 2:服务器随后会为每个队伍分配自己的房间(代码已编写但未测试)。服务器根据玩家的 IP 确定其队伍,因此同一 IP 背后的玩家会保留在比赛房间中。设备 ID 登录。 玩家会获得一个与其 PC 绑定的 EOS 身份,无需平台账户。对于正式发行的游戏,请使用平台登录(Steam、主机)并关联账户。
基础菜单。 “寻找比赛”(Find Match)覆盖层是一个简单的 Slate 控件。如需制作自己的菜单,请调用
FindMatch并从 UMG 侦听子系统的状态。服务器上没有票据检查。 服务器不会检查连接的玩家是否持有本场比赛的匹配器票据,因此任何获取服务器地址的人都可以加入,并在开启语音的情况下获取该房间的语音令牌。
测试了什么
于 2026 年 10 月在 Edgegap 上进行了端到端测试(撮合测试于 10 月 14 日通过),使用从源码构建的 Unreal Engine 5.5.4、Windows 客户端以及 Edgegap 上的 Linux 服务器:
匹配:两个客户端根据延迟匹配到同一个 Edgegap 部署上;在两者都离开后,服务器停止了自己的部署。
语音,本地:一台 PC 上的两个客户端(
-EOSVoiceNewDeviceId,虚拟音频输入)连接本地专用服务器:两者使用不同的 EOS 身份加入了房间。语音,在 Edgegap 上:两个客户端匹配到同一个部署中,在同一个队伍房间内,可以互相听到声音。当其中一个退出时,服务器将其从房间中移除(204)。
需要查找的日志行(LogEdgegapVoice):在服务器上,为 Voice: trusted voice server ready,然后每个玩家显示 Voice: <id> gets room <room>,当玩家离开时显示 Voice: removed <id>。在每个客户端上,显示 Voice: logged into EOS as <id> 和 Voice: joined room <room>。
尚未测试:3 或 4 名玩家的比赛、两个队伍在不同房间、Mac 客户端以及使用 Docker Extension 构建示例。
常见问题
关于将 Unreal 的自上而下(Top Down)模板与 Edgegap 匹配系统和 EOS 语音聊天结合运行的常见问题。
Unreal 的 Top Down 模板可以在专用服务器上运行吗?
是的。Edgegap 的示例在 Top Down 模板中添加了一个服务器目标和一个服务器地图,并将其打包为 Linux 专用服务器。玩家可以通过 open <IP:port> 加入,或者在开启 Edgegap 匹配器后使用“查找比赛”(Find Match)按钮加入。
EOS 语音聊天可以在 Linux 专用服务器上运行吗?
不是通过 EOS SDK,因为它不支持 Linux 上的语音功能。该示例的服务器改用 EOS Voice Web API:它会验证每位玩家的 EOS ID 令牌并发放语音聊天室令牌,而 Windows 或 Mac 客户端则加入这些聊天室。
玩家使用 EOS 语音聊天需要 Epic Games 账户吗?
不需要。该示例使用设备 ID 将玩家登录到 EOS,因此无需注册任何内容。对于已发布的游戏,你可以将其替换为你所在平台的登录方式,例如 Steam。
每个队伍可以拥有自己的语音频道吗?
是的。在开启团队房间后,服务器会将每个匹配系统团队分配到其独立的房间中,因此玩家无法听到另一支团队的声音。该示例的匹配系统配置文件中每场比赛只有一个团队,所以在您添加第二个团队之前,所有人都会共享同一个房间。

客户
了解更多已接入 Edgegap 的客户案例
提供 31 个从其他平台迁移至 Edgegap 的工作室案例研究。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

台球大师巡回赛Max
RETA Games
案例研究

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

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.
案例研究

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









