了解Edgegap的工作原理

了解Edgegap的工作原理

/

Unreal 對局配對

Unreal 對局配對

部署至 Edgegap

已发布

已发布

已发布

最近一次准确性审核

最近一次准确性审核

最近一次准确性审核

Unreal 對局配對:如何通过 Edgegap 为您的 Unreal Engine 多人游戏添加對局配對

Unreal 對局配對:如何通过 Edgegap 为您的 Unreal Engine 多人游戏添加對局配對

本指南向您展示如何为已在 Edgegap 专用游戏服务器上运行的 Unreal Engine 多人游戏添加匹配功能:玩家选择寻找比赛(Find Match),与附近的玩家分组,并连接到 Edgegap 在他们附近启动的服务器。当所有人离开后,服务器会自动停止。

一旦您的游戏服务器容器化,Edgegap 只需通过一个简单的 API 调用即可将其按需部署到全球 615 多个边缘云节点,并且完全按使用量计费:无需租用、配置整台服务器,也无需在比赛间隔期间保持其运行。对于预留容量的持久性服务器,Edgegap 提供了专用机群(Private Fleets)。Edgegap 的對局配對功能构建于此基础之上,并且是可选的。

您可以在 Edgegap 控制面板中使用 JSON 文件配置匹配器,无需编写后端代码。在您的游戏中,两个现成的 C++ 文件负责测量延迟(Ping)、创建匹配票证、等待服务器并连接,蓝图可以直接调用它们。它们使用 Unreal 自带的 ClientTravel 进行连接,因此适用于任何使用 Unreal 标准复制和专用服务器的游戏,无需更改您的游戏模式或玩家控制器。

本指南包含以下内容:

  1. 为您的游戏准备一个正常工作的 Edgegap 应用版本

  2. 将您的编码智能体连接到 Edgegap(可选)

  3. 将匹配文件添加到您的项目中

  4. 配置客户端

  5. 创建您的匹配器

  6. 选择您的匹配规则

  7. 使用两名玩家进行测试

您可以通过两种方式进行操作,也可以结合使用:

  • 使用编码智能体。将 Claude Code、Cursor 或其他智能体连接到 Edgegap MCP 服务器及其智能体技能。智能体负责添加文件、编辑配置、运行构建并检查匹配器。您只需负责控制面板上的点击操作和测试游戏。

  • 手动操作。以下每个步骤也可以在没有智能体的情况下进行。

本指南遵循 Edgegap 的對局配對文档。请查看该文档以获取最新的配置选项和 API 变更。

在本指南结束时,玩家只需点击寻找对局,Edgegap 的配对系统便会根据玩家的延迟将他们与其他玩家进行分组,在离所有人最近的位置启动专用服务器,并且每个客户端都会自动连接到该服务器。当比赛结束且所有人离开后,服务器会自动停止,因此您只需为使用时间付费。

配对系统本身是免代码的:您可以在 Edgegap 控制面板中使用 JSON 文件对其进行配置。在游戏端,Unreal Engine 并没有像 Unity 那样拥有官方的 Edgegap 對局配對 SDK。相反,Edgegap 提供了两个开箱即用的 C++ 文件,您可以直接放入项目中。它们能为简单比赛完成 Unity SDK 所做的一切:测量 ping、创建票证、等待服务器并进行连接。您无需编写任何网络代码,并且蓝图菜单可以直接调用它们。

因为客户端是通过 Unreal 内置的 ClientTravel 进行连接的,所以这适用于任何使用 Unreal 标准复制和专用服务器的游戏,无需更改您的游戏模式或玩家控制器。

前置条件

  • 一个 Edgegap 账号。本指南使用免费层(Free Tier)即可。

  • 一个带有 C++ 模块的 Unreal Engine 5 项目(已在 UE 5.5 上验证;5.3+ 版本操作相同)。纯蓝图项目?先通过工具 → 新建 C++ 类添加一个。

  • 您的游戏的 Linux 专用服务器版本,已容器化并作为应用版本发布在 Edgegap 上,游戏端口(7777,UDP)命名为 gameport。

  • 已验证连接:您已从控制面板部署过该版本一次,并已在控制台(~)中使用 open {IP}:{port} 从客户端成功加入。

不要在您尚未成功连接过的服务器上添加配对功能。如果之后出现问题,您就能确定是对局配对层的问题,而不是服务器本身的问题。

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

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

1. 开始之前

  • 一个免费的 Edgegap 账户。请验证您的电子邮箱。测试无需信用卡。

  • 一个包含 C++ 模块的 Unreal Engine 5 项目(已在 UE 5.5 上验证;5.3 或更新版本同样适用)。纯蓝图项目?请先通过工具 → 新建 C++ 类 → 无添加一个。

  • 游戏服务器的可用 Edgegap 应用版本:一个容器化的 Linux 专属服务器,端口为 7777,UDP,命名为 gameport。對局配對会为每场比赛部署所请求的版本,因此需要一个功能完备的容器化游戏服务器来实现端到端运行。如果您目前还没有,请参考我们的指南:Unreal Engine。

  • 经过测试的连接:您已经从仪表板部署过一次该版本,并在控制台中使用 open <IP>:<port> 从客户端成功加入。请勿在尚未成功加入的服务器上添加撮合机制:这样如果之后出现问题,您就能确定问题出在撮合层。

  • 对于代理路径:从 仪表板 → 用户设置 → 令牌 获取的 Edgegap API 令牌。该令牌适用于整个组织,因此请将其视为密码:切勿将其放入您的项目、游戏客户端或聊天中。

2. 将您的代码代理连接到 Edgegap

如果您完全手动操作,请跳过此步骤。

Edgegap MCP 服务器允许您的智能体在您的账户上创建应用和版本、部署服务器、读取日志并生成撮合系统配置。edgegap-unreal 智能体技能为其提供了撮合和服务器关闭文件、相关配置以及已知陷阱。

Claude Code(在您自己的终端中运行,这样令牌就绝不会经过聊天传递):

claude mcp add --transport http edgegap https://mcp.edgegap.dev/mcp -H "Authorization: token YOUR_EDGEGAP_API_TOKEN" --scope user

然后安装技能:/plugin marketplace add edgegap/edgegap-agent-skills,接着执行 /plugin install edgegap@edgegap。重启会话。

Cursor、VS Code 以及其他支持发送标头的客户端:添加 https://mcp.edgegap.dev/mcp 并附带标头 Authorization: token YOUR_EDGEGAP_API_TOKEN,然后使用 npx skills add edgegap/edgegap-agent-skills --skill "*" 安装技能。

Claude Desktop:自定义连接器无法发送该标头,因此请改用本地服务器(Node 18+):{ "mcpServers": { "edgegap": { "command": "npx", "args": ["-y", "@edgegap/mcp"] } } }。首次使用时它会要求提供令牌。

检查是否正常运行:

“列出我的 Edgegap 应用。”

您的应用及其版本应该会出现在列表中。

3. 将匹配文件添加到您的项目中

Edgegap 在其开源智能体技能代码库中发布了两个即插即用文件:

  • EdgegapMatchmakerSubsystem(游戏客户端):测量与 Edgegap 信标的延迟(ping),创建匹配票证,等待服务器,然后建立连接。它包含一个基础的寻找比赛/取消覆盖层。

  • EdgegapServerSubsystem(专属服务器):当匹配系统启动服务器后,一旦比赛中没有玩家,它就会停止部署。

使用您的智能体时,请先进行审计(只读):

“查看我的 Unreal 项目,并告诉我玩家当前是如何连接的:C++ 模块名称、是否存在 Server 目标、服务器默认地图,以及是否有任何内容使用了 open、ClientTravel、会话或 OnlineSubsystem。不要修改任何文件。”

然后:

“使用 edgegap-unreal 技能将 Edgegap 匹配添加到该项目中。放入 matchmaker 和 server 子系统,在 DefaultGame.ini 中添加配置部分并禁用匹配,同时确认编辑器目标仍能编译。创建完成后,我会把 matchmaker 的 URL 和令牌提供给你。”

手动操作:

  1. 将 assets/unreal/Source/ 中的四个文件(每个包含 .h 和 .cpp)复制到 Source/<YourModule>/ 中。

  2. 在 Source/<YourModule>/<YourModule>.Build.cs 中,将 "HTTP", "Json", "Sockets", "Slate", "SlateCore" 添加到 PublicDependencyModuleNames。

  3. 重新生成项目文件并构建编辑器目标。

这两个子系统默认均处于关闭状态:在第 5 步中开启匹配之前,添加这些文件不会产生任何影响。它们负责处理信标 ping、票证、重试、玩家在搜索过程中退出时取消票证、选择正确的端口、ClientTravel 调用以及服务器关闭。初次测试时您无需编写任何代码。

更倾向于使用蓝图?Fab 上由 Betide Studios 开发的 Edgegap Integration Kit 支持 Edgegap 匹配,并提供了现成的蓝图示例。

4. 配置客户端

所有设置均位于 Config/DefaultGame.ini 中以您的模块命名的节下:[/Script/<YourModule>.EdgegapMatchmakerSubsystem]。添加以下行:

  • bEnabled=False:在步骤 5 之前保持关闭状态。

  • MatchmakerUrl="YOUR_MATCHMAKER_URL" 和 AuthToken="YOUR_MATCHMAKER_AUTH_TOKEN":来自步骤 5 中的撮合器页面。请将 URL 保留在引号内,否则 Unreal 会在 // 处将其截断,导致请求失败并提示“Couldn't resolve host name”。

  • Profile=simple-example:撮合器配置中的配置文件名称。

  • PortName=gameport:应用程序版本上的端口名称。

  • bSendBeaconLatencies=True:仅当配置文件包含延迟规则时使用(简单示例包含此规则)。撮合器会拒绝包含意外值的票据,因此请确保此项与您的配置保持同步。

  • bShowDefaultUI=True:在菜单地图上显示基本的“寻找比赛”浮层。一旦您自己的菜单调用了“寻找比赛”,请将其设置为 False。

此外,还需添加一个空的 [/Script/<YourModule>.EdgegapServerSubsystem] 节。如果 5 分钟内没有人加入,或者在最后一名玩家离开 15 秒后,服务器将自行停止(NoPlayerTimeoutSeconds、EmptyServerGraceSeconds)。这仅适用于撮合器启动的服务器,因此您的手动测试部署不受影响。

Auth Token 可以安全地随游戏客户端一同发布:它只能创建和读取票据,无法访问您的 Edgegap 账户。在公开仓库中,请在 DefaultGame.ini 中保留占位符,并将真实值放入 Config/UserGame.ini 中,后者会覆盖前者、被 Git 忽略,且仍会被打包到构建版本中。

5. 创建您的撮合器

  1. 在仪表板中,打开 Matchmaker,选择创建 Matchmaker,为其命名,然后选择 Simple Example 模板(它包含的内容)。

  2. 将 application.name 和 application.version 设置为与仪表板中显示的应用程序和版本完全一致的名称及版本。如果版本不存在,配置将被拒绝。

  3. 选择创建并启动,然后等待其就绪。新 matchmaker 的地址可能需要长达 5 分钟的时间才能响应。

  4. 将 API URL 和 Auth Token 复制到 DefaultGame.ini 中,并设置 bEnabled=True。

在启动游戏前检查 URL 和令牌:curl -H "Authorization: <auth token>" <api url>/locations/beacons。如果返回信标的 JSON 列表,则表示它们正常工作。

与您的代理配合使用: “这是我的 matchmaker API URL 和 Auth Token。请检查它们是否有响应,将它们填入 Edgegap matchmaker 设置中,并开启匹配功能。”

6. 选择您的匹配规则

首先使用简单示例运行第 7 步测试,然后根据您的游戏定制规则。简单示例包含两项规则:

  • 比赛规模:恰好 2 名玩家组成一支队伍,因此撮合程序会等待 2 张票据才启动服务器。

  • 延迟:仅当玩家到同一个 Edgegap 位置的延迟差在 100 毫秒以内时才会分组,且忽略高于 200 毫秒的位置。

单人测试?添加扩展规则,以便单个玩家在 10 秒后即可获得服务器:"expansions": { "10": { "match_size": { "min_team_size": 1 } } }。停止撮合程序,编辑配置,然后重新启动。在正式发布前请将其移除。

然后添加队伍规模、技术或段位、游戏模式、地图以及随着玩家等待时间增加而放宽规则的扩展。类型示例(竞技、合作、社交、候补补位)请参阅撮合文档。除比赛规模外,每条规则都需要在每位玩家的票据中包含对应的值:添加规则时请告知您的代理,它也会同步更新客户端。

撮合程序部署会以 JSON 字符串形式接收 MM_MATCH_ID、MM_MATCH_PROFILE、MM_TICKET_IDS、MM_TEAMS、MM_GROUPS 以及针对每位玩家的 MM_TICKET_<id>。使用 FPlatformMisc::GetEnvironmentVariable 读取它们以分配队伍或检查加入的玩家。

发布新的服务器版本时,请更新 application.version(停止、编辑、启动),否则比赛将继续部署旧版本。

7. 双人测试

  1. 请确保没有测试部署仍在运行:免费层每次仅运行一个部署,遗留的部署会阻塞匹配。

  2. 并排启动两个客户端:UnrealEditor.exe "<path>\<Project>.uproject" -game -windowed -ResX=960 -ResY=540 -WinX=0 -log,第二个客户端使用 -WinX=970。

  3. 在两个客户端中均选择Find Match。状态会从测量延迟变为搜索中、找到匹配,然后是正在连接。几秒钟内,两个客户端都会加载到同一个服务器中,控制面板会显示带有两个票据 ID 标记的部署。

  4. 关闭两个客户端。大约一分钟后,部署会自动停止。

您也可以从控制台使用 Edgegap.FindMatch 和 Edgegap.CancelMatch 排队,或者在命令行中添加 -FindMatch。如果票据分配到了服务器但客户端无法连接,问题出在服务器端,而不是匹配器:请手动部署该版本并再次测试 open <IP>:<port>。在免费层上,匹配器在每次启动 3 小时后停止:请从控制面板重新启动它。

后续步骤

后续步骤

构建您自己的菜单。FindMatch、CancelMatch、GetState 和 GetStatusText 均可在 Edgegap Matchmaker Subsystem (Get Game Instance Subsystem) 上通过蓝图调用,且 OnStatusChanged 会在您的 UMG 控件每次更新时触发。然后设置 bShowDefaultUI=False。

文件的工作原理。客户端获取 Edgegap 的信标并计算与每个信标的 TCP 握手时间(三局两胜,并行,1 秒超时),将以城市为键的 ping 包含在票据中发送,每 2 秒轮询一次直至分配完成,然后跳转至服务器的 IP 以及 PortName 中指定的端口,等同于 open <IP>:<port>。取消或退出会删除票据。在服务器端,子系统会识别 matchmaker 的 MM_MATCH_ID,监控登录情况,并在对局清空后调用 Edgegap 注入的 ARBITRIUM_DELETE_URL。身份验证令牌直接放入 Authorization 标头中,无需“Bearer”前缀。

准备上线?让您的代理运行 edgegap-launch 技能的检查清单,并在发布前选择生产环境 matchmaker。正在使用 Epic Online Services?请参阅 Epic Online Services。

遇到困难?让您的代理加载 edgegap-troubleshoot,或在 Edgegap Discord 上向我们的团队和其他工作室咨询。

常见问题

关于将 Edgegap 匹配系统添加到 Unreal Engine 多人游戏的常见问题。

是否有适用于 Unreal Engine 的 Edgegap 匹配 SDK?

Edgegap 提供了两个开源的 C++ 文件,您可以直接放入项目中以替代插件:一个用于游戏客户端,另一个用于专用服务器。对于以蓝图为主的团队,Fab 上的 Betide Studios 的 Edgegap Integration Kit 也支持 Edgegap 匹配系统。

我可以将 Edgegap 匹配系统添加到纯蓝图(Blueprint-only)的 Unreal 项目中吗?

是的。添加一个空的 C++ 类以创建一个 C++ 模块,放入相关文件,然后从蓝图中调用 Find Match。或者使用 Betide Studios 的 Edgegap Integration Kit,它自带了一个蓝图示例。

我需要更改游戏模式才能使用 Edgegap 匹配系统吗?

不。客户端使用 Unreal 内置的 ClientTravel 进行连接,这与输入 open 加上服务器地址相同,因此任何使用标准复制和专用服务器的游戏都可以直接运行。

撮合系统(Matchmaker)的 Auth Token 在 Unreal 游戏客户端中安全吗?

是的。它只能创建和读取撮合票据(matchmaking tickets),无法访问您的 Edgegap 账户。在公共代码仓库中,请将真实值保存在 Config/UserGame.ini 中,Git 会忽略该文件,而 Unreal 仍会将其打包。

Edgegap 匹配服务的费用是多少?

测试是免费的,在共享撮合系统上进行,该系统每次启动后 3 小时停止。对于已上线的游戏,您可以选择生产撮合系统,并且游戏服务器仅在运行时按每 vCPU 每分钟计费。

客户

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

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

他们选择 Edgegap 的关键原因

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

费用

定价

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

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

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

边缘云

按需

$0.00115

/ vCPU

/ 分钟

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

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

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

只需添加信用卡。

边缘云

按需

$0.00115

/ vCPU

/ 分钟

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

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

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

只需添加信用卡。

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

预留容量

$0.0282

/ vCPU

/ 小时

按月计费,始终开启

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

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

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

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

预留容量

$0.0282

/ vCPU

/ 小时

按月计费,始终开启

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

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

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

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

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

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

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

Eggegap 的功能和价格:Edge Cloud 与 Private Fleets 的详细对比

Eggegap 的功能和价格:Edge Cloud 与 Private Fleets 的详细对比

对比

免费试用

边缘云

自有车队

功能特色

分析与监控

账单警报

点击展开

还有 28 行

解锁

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

对比

免费试用

边缘云

自有车队

功能特色

分析与监控

账单警报

点击展开

还有 28 行

解锁

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

对比

免费试用

边缘云

自有车队

功能特色

分析与监控

账单警报

点击展开

还有 28 行

解锁

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