
如何为竞争性回合制多人游戏添加匹配机制
Edgegap 的 配对系统 是一个完全托管、无限可定制的配对系统,能够在全球范围内对玩家进行最佳分组——在您开发多人回合制游戏期间使用是免费的。
它也是我们所知道的 唯一 配对系统,具有 基于延迟的配对规则,为您的游戏提供理想的在线多人体验,无论是使用哪种引擎(Unity、Unreal 等)或游戏服务(EOS、UGS、PlayFab、Heroic Labs Nakama、Braincloud 等)。
由于我们的配对系统基于参数,因此无需编写代码。因此,集成非常简单,如果需要的话,我们的 入门指南 将引导您每一步。
当您的游戏上线时,由于我们的配对系统是完全托管的,您无需处理基础设施、错误、停机、可扩展性或数据库管理。我们为您处理所有这些。将您的 DevOps 工作负载减少到几乎为零。
如何将匹配系统集成到您的多人回合制游戏中
-> 本文基于 匹配系统文档。如果您遇到问题或差异,请确保参考 原始指南,因为它们更新频率更高。
以下示例将帮助您测试核心 匹配系统 玩家流程,具体如下:
将我们的匹配系统实现到您的游戏中,有 五个步骤:
第一步是 创建一个帐户 并使用我们的策略游戏示例。 看!您已经(技术上)完成了一半!您只需将匹配器集成到您的游戏中(见步骤 5)。
现在,您绝不能盲目跟随在互联网上找到的 JSON 示例,因此强烈建议您根据您的回合制游戏调整上述规则。步骤 2(“探索配置”)是我们关于每个 匹配规则功能的“如何阅读”指南(“探索配置”)。
步骤 3(“审查实例详细信息”)涵盖您个人的特定 匹配器,以确保其已部署并与您游戏的设计相兼容。
步骤 4,如其名称所示(“4. 测试票据 API”),全是关于测试玩家的匹配请求是否被匹配器收到,这些请求称为 票据。
步骤 5(“在您的游戏中集成匹配系统”)强调如何在您引擎的项目中集成匹配器。
如果您有故障排除挑战,我们的深度 学习中心 提供额外的故障排除技巧。
1. 设置免费层
注册您的免费 Edgegap 账户,并导航到 匹配器仪表板页面。
从那里,首先点击 创建匹配器 ,然后输入:
匹配器的名称 – 仅供您参考,例如
quickstart-dev
,然后,上传以下简单示例作为您回合制游戏的 JSON 配置:
(温馨提示,请确保更改应用程序 name
和 version
以匹配您的 应用程序和版本!)
如果没有验证错误出现,请按下 创建并开始 并等待该过程完成。这将导致一个新的免费集群启动,同时拥有您的简单示例匹配器。
您现在可以继续下一步。
2. 探索配置
独特的竞争性回合制游戏规则
专为回合制游戏设计,您可以为游戏模式定义多个 匹配配置文件 特定的规则和设置:
在更休闲的游戏中限制两个玩家之间的排名差异,
在排名游戏中限制排名差异,仅允许同等级的对手,
让玩家提供他们的地图偏好,选择适合每个人的地图,
将 匹配延迟 限制在最大阈值内,以防止将相距较远的玩家进行匹配,
将 匹配延迟 限制在最大差异内,以最大化 ping 公平性,
在允许更多玩家时,使用不同的 应用版本 分配更多 CPU 或内存,
为预先制作的大厅或填充队伍而加入 作为组 ,而不超过团队规模。
从理想条件开始,并且 扩展限制 以确保快速匹配:
随着时间的推移逐步放松延迟限制,以找到更多玩家,
逐步增加允许的排名差异,以找到更多玩家,
在最高排名(挑战者)之间增加扩展的时间,因为可用的玩家较少。
对于晋级赛,创建更高排名的票据,以与更强的对手匹配。
定义单独的作弊者配置文件 以确保被标记的作弊者或有大量管理报告的玩家不会对合法球员在排名比赛中的体验产生负面影响。
语义版本控制
每个新版本使用 语义版本控制 明确传达更改的影响,通过解释格式 major.minor.patch
:
major
版本包含重大更改并需要集成审查,minor
版本包含实质性的向后兼容性改进,patch
版本包含错误修复和小改进。
某些 部署可能导致错误。我们尝试通过自动重试部署最多 max_deployment_retry_count
次来解决这个问题(无需客户端确认)。
为了确保意外的客户端崩溃或被遗弃的票据不会停留并占用您的匹配器资源,票据将在 ticket_expiration_period
后被取消,其状态会变为 已取消
,并在 ticket_removal_period
后被永久删除。
我们匹配逻辑的核心配置在 匹配配置文件中。每个配置文件都是一个完全隔离的匹配队列,指向 应用版本 ,这些版本预定义了所需的 CPU 和内存(RAM)资源。
匹配规则 必须满足初始规则集的条件,以便玩家能够被分组在一起,每条规则由三个属性定义:
您选择的名称,例如 -
匹配大小
,规则类型,也称为运算符,例如 -
player_count
,最后是运算符属性,例如
team_count
或team_size
。
玩家数量规则
这是一个特殊规则,定义了需要多少玩家匹配才能启动分配:
team_count
指的是团队的数量,1 个团队可用于合作或多人竞技模式,team_size
指的是每个队的 玩家数量。
我们的简单示例演示了一个由 2 名玩家组成的合作游戏。
请注意,“玩家数量”规则 是必需的,且只能在您的初始配置中定义一次。
延迟规则
使用此规则为所有玩家提供尽可能低的 ping。一旦客户端测量并提交他们的往返时间(ping)与所有可用信标,Gen2 将只考虑在特定 difference
ping 值内的匹配,该值是根据 Ping 信标 测量的。这提供了一种“软”解决方案,允许与邻近区域匹配,特别是改善人口稀少区域的匹配速度。使用 max_latency
防止与距离较远的玩家进行匹配。
您现在可以继续下一步。
我们的示例 信标
规则最初为 "difference": 50, "max_latency": 200
:
爱丽丝和鲍勃将匹配,因为北京被丢弃(>200),其余在 | A-B | < 50 之内:
爱丽丝 {蒙特利尔: 12.3, 纽约: 45.6, 达拉斯: 59.9, 北京: 264.4}; 和
鲍勃 {蒙特利尔: 27.3, 纽约: 32.4, 达拉斯: 23.1, 北京: 252.2}。
查理和戴夫不会匹配,因为 | C-D | > 50 被达拉斯信标:
爱丽丝 {蒙特利尔: 5.7 纽约: 44.2, 达拉斯: 59.5, 北京: 263.2}; 和
鲍勃 {蒙特利尔: 57.8, 纽约: 32.0, 达拉斯: 24.2, 北京: 272.3}。
请注意,“延迟规则”可以在您的初始配置规则中定义一次。
3. 审查实例详细信息
在我们的仪表板中审查新匹配器的详细信息,一旦初始化:

状态 指示服务健康,可能为在线、离线或错误。
标识符 可以帮助 Edgegap 工作人员快速找到您的匹配器,如果您需要帮助进行故障排除。
启动时间 可用于跟踪最新的更新时间。
规模 对应于我们的 定价层。
API URL 将被游戏客户端和游戏服务器用于与 Gen2 进行通信。
Swagger URL 是我们提供的便捷 openAPI 规范 GUI,可以探索 API 架构。
Auth Token 是由游戏客户端和游戏服务器用于认证的唯一秘密令牌。
要使用 API 测试新的匹配器, 您将需要 Swagger URL、API URL 和 Auth Token。
您现在可以继续下一步。
4. 测试票据 API
首先, 打开您的 Swagger URL 以检查您的 openAPI 架构。
单击“匹配器”标题下方的 /...swagger.json
URL 以打开原始 JSON 架构:

将此页面作为文件保存在您的驱动器上 (CTRL/CMD+S
)。
打开您的 Postman 应用程序 并登录到您的免费帐户。
从上一步导入您的 swagger.json
文件:
保持选择 Postman 集合 ,
选择 查看导入设置 并将设置 参数生成 更改为 示例。
确认导入,这将导致在左侧“集合”列表中出现一个名为“匹配器”的新集合。

查看更多操作,打开 授权 选项卡并选择:
授权类型 - API 密钥,
密钥 - “授权”
值 - 在此处插入您的 AuthToken 值,
添加到 - 头部。
按(CTRL/CMD+S
)或保存图标以 保存更改。Postman 标签中的橙色点应该消失。
在您的匹配器集合中,选择 票据 和 创建匹配票据,打开一个新选项卡。
选择 正文 选项卡以预览您的 玩家票请求:
请注意 player_ip
设为 null
- 这将导致使用自动添加到您的请求中的 IP 地址(参见 服务器到服务器集成 以获取其他方案),
profile
指的是您的 匹配配置文件,attributes
包括您匹配器规则的值,在这种情况下为latencies
规则,规则
player_count
是唯一一条不需要在玩家票中包含任何属性的规则。
注意:请确保参考示例的 Swagger 导入配置。
单击 发送 并查看对您的玩家票请求的响应:
id
是您的唯一匹配票据 ID,请保存此 ID 以便稍后检查您的票据,profile
确认选择 匹配配置文件,group_id
是分配给每个票据的唯一组 ID,单个玩家表示为 1 的组,请参见 加入组 以与您的朋友或大厅进行匹配,
player_ip
是玩家的解析公共 IP 地址,无论使用何种识别方法,assignment
设为 null 以指示该票据尚未与任何服务器匹配或分配,created_at
提供有关玩家票创建时间的信息,以供游戏 UI 使用,status
指示票据的当前状态,所有票据在SEARCHING
中开始(有关详细信息,请参见 匹配过程)。
通过再次点击 发送 创建第二张票据,以使我们的两名玩家匹配并启动服务器。
在您的匹配器集合中,选择 {ticketId} 并 读取匹配票据。
在上一步的响应中输入票据 ID 并单击 发送。

查看您的玩家票的更新分配:
状态首先更改为
MATCH_FOUND
,同时保持assignment
设置为null
以指示玩家已匹配并正在分配服务器,

再次点击 发送 以检查您的票据,并查看您的玩家票的更新分配:
状态更改为
HOST_ASSIGNED
,并且assignment
包含分配服务器的详细信息。
请注意,每个部署都会标记所有票据 ID 和配置文件,以增加可追踪性。

尝试从您的游戏客户端连接到指定的服务器。
一旦您确认能够连接到您的部署而不出现问题并结束测试,请 停止您的部署 以释放帐户中的容量供下一个构建使用。
您现在可以继续下一步。
5. 在您的游戏中集成匹配器
Edgegap 的匹配系统集成:
在 游戏客户端中,我们建议在整个 匹配过程 中向玩家提供票据状态更新,使用游戏内 UI 以获得最佳的玩家体验。请参见:
Edgegap - Unity Gen2 匹配 SDK,
导入简单示例 并根据您的需求进行自定义,
Betide Studio - Unreal Engine Edgegap 集成工具包,
下载示例项目 并根据您的需求进行自定义。
在 游戏客户端中,确保您处理不可重试的错误:
HTTP 404 未找到
- 票据已被删除,HTTP 500 内部服务器错误
- 临时服务中断。
在 游戏服务器中,处理玩家偏好和初始服务器上下文。无需 API 集成:
读取 注入的环境变量(Gen2) 以检索初始玩家的匹配数据。
读取 注入的环境变量(应用版本) 以获取特定版本的参数、设置(玩家容量)和机密信息。
读取 注入的环境变量(部署) 以获取部署信息,例如 IP 地址、位置等。
一旦玩家连接后, 游戏服务器和游戏客户端 开始加载场景,以执行同步步骤(例如选择和加载地图/场景/关卡)。我们建议使用完整的 3D 场景、类似大厅的社交 UI 或加载进度条的加载屏幕,以指示初始化正在进行。
一旦 游戏客户端 完全加载,玩家将加载/前往主要游戏场景。
可选地, 游戏服务器 可以创建和管理 Backfill 及玩家容量(添加或替换离开游戏的玩家)。
请确保您的 部署将被正确停止 使用 注入的 DELETE_URL,如果:
没有玩家加入比赛,
所有玩家已离开比赛,
比赛正确结束。
恭喜,您已完成 Edgegap 匹配器的集成!如果您想了解更多,请在我们的学习中心中阅读所有内容。
书写者
Edgegap团队
