
如何在MMO游戏中添加匹配系统
Edgegap 的 匹配系统 是一个完全托管、无限自定义的匹配系统,能够优化全球玩家的分组——在开发你的休闲多人游戏期间使用是免费的。
这也是我们所知道的 唯一 拥有 基于延迟的匹配规则 的匹配系统,能够为你的游戏提供理想的在线多人体验,无论使用何种引擎(Unity、Unreal 等)或游戏服务(EOS、UGS、PlayFab、Heroic Labs Nakama、Braincloud 等)。
由于我们的匹配系统基于参数,因此无需编写代码。集成非常简单,如果需要,我们的 入门指南 将在每一步中指导你。
当你的游戏上线时,由于我们的匹配系统是完全托管的,你无需处理基础设施、错误、停机、可扩展性或数据库管理。我们会为你处理所有的事情。将你的 DevOps 工作负载减少到几乎为零。
如何将匹配系统集成到您的 MMO 多人游戏中
-> 本文基于 匹配文档。如果您遇到问题或不一致,请确保参考 原始指南,因为它们更常更新。
以下示例将帮助您测试核心 匹配系统 玩家流程,即:
有 五个步骤 可将我们的匹配系统实现到您的游戏中:
第一步是 创建一个账户 并使用我们的 MMO 游戏示例。万岁,您已经(技术上)完成了一半!您只需要将匹配系统集成到您的游戏中(见第 5 步)。
现在,您绝不能盲目遵循在互联网上找到的 JSON 示例,因此强烈建议您根据上述规则调整您的回合制游戏。第 2 步(“探索配置”)是我们的“如何阅读”,深入讲解每个 匹配规则的功能(“探索配置”)。
第 3 步(“审核实例详细信息”)涵盖您个人的特定 匹配系统,以确保它已经部署并与您的游戏设计配合工作。
第 4 步,正如名称所暗示的(“4. 测试票据 API”),全部是关于测试玩家的匹配请求是否被匹配系统接收,即票据。
第 5 步(“将匹配系统集成到您的游戏中”)强调了如何在您引擎的项目中集成匹配系统。
如果您遇到故障排除挑战,我们深入的 学习中心 提供额外的故障排除提示。
1. 设置免费层
注册您的免费 Edgegap 账户,并导航至 匹配系统仪表板页面。
从那里,先点击 创建匹配器 ,然后输入:
您的匹配器名称 – 仅供您参考,例如
quickstart-dev
,然后,上传以下简单示例作为您 MMO 游戏的 JSON 配置:
(温馨提醒,请确保更改应用程序 名称
和 版本
以匹配您的 应用程序和版本!)
如果没有出现验证错误,点击 创建并启动 并等待过程完成。这将导致启动一个新的免费集群,配备您的简单示例匹配系统。
您现在可以进入下一步。
2. 探索配置
独特的多人 MMO 游戏规则
自定义大厅(私人大厅,沙盒级别)在沙发多人游戏中是非常受欢迎的选项,但也可以在竞争或合作游戏中测试新特性,然后再进入主要游戏模式。这些游戏通常要求尽可能少的限制,但旨在确保玩家可以 以团队加入。
填补 票据可能使用自定义大厅配置文件来支持可靠地邀请朋友,只要填补票据是有效的。
提示: 将
custom-lobby-example
配置文件添加到您的配置中 除了其他配置文件 以支持自定义大厅。
语义版本控制
随着我们向匹配系统发布更新,每个新版本使用 语义版本控制 明确传达通过解析格式 major.minor.patch
变化的影响:
major
版本包括破坏性变化并需要集成评审,minor
版本包括重大的向后兼容改进,patch
版本包括错误修复和小改进。
一些 部署可能会导致错误。我们尝试通过自动重试部署至多 max_deployment_retry_count
次来解决这个问题(无需客户端确认)。
为确保意外的客户端崩溃或被放弃的票据不会滞留并占用您的匹配系统资源,在 ticket_expiration_period
之后,票据将被取消,其状态将更改为 CANCELLED
,然后在 ticket_removal_period
之后永久删除。
我们的匹配逻辑的核心配置在 匹配配置文件中。每个配置文件都是一个完全隔离的匹配队列,指向预定义数量的所需 CPU 和内存(RAM)资源的 应用版本。
匹配规则 必须满足初始规则集中的条件,玩家才能被分组在一起,每个条件由三个属性定义:
您选择的名称,例如 -
匹配规模
,规则类型,也称为运算符,例如 -
player_count
,最后是运算符属性,例如
team_count
或team_size
。
玩家计数规则
这是一个特殊规则,定义了需要多少玩家匹配才能启动分配:
team_count
指的是团队数量,1 个团队可以用于合作或自由对抗模式,team_size
指的是每个团队的 玩家数量。
我们的简单示例演示了一个有 2 名玩家的合作游戏。
请注意,“玩家计数”规则 是必需的,并且只能在初始配置规则中定义一次。
延迟规则
使用此规则为所有玩家提供尽可能低的延迟。一旦客户端测量并提交其往返时间(延迟)与所有可用信标进行比较,Gen2 只会考虑在特定的 difference
延迟值范围内进行匹配,该范围是与 延迟信标进行比较的。这为分离您的玩家群体提供了一种“软”解决方案,使其能够与邻近区域匹配,尤其是提高了人口较少区域的匹配速度。使用 max_latency
避免与远离的玩家进行匹配。
您现在可以进入下一步。
我们的示例 信标
规则如下 "difference": 50, "max_latency": 200
最初:
Alice 和 Bob 将匹配,因为北京被丢弃(> 200),其余值在 | A-B | < 50 内:
Alice {Montreal: 12.3, Newark: 45.6, Dallas: 59.9, 北京: 264.4}; 以及
Bob {Montreal: 27.3, Newark: 32.4, Dallas: 23.1, 北京: 252.2}。
Charlie 和 Dave 将不会匹配,因为 | C-D | > 50 适用于达拉斯信标:
Alice {Montreal: 5.7, Newark: 44.2, Dallas: 59.5, 北京: 263.2}; 以及
Bob {Montreal: 57.8, Newark: 32.0, Dallas: 24.2, 北京: 272.3}。
请注意,“延迟规则” 只能在初始配置规则中定义一次。
3. 审核实例详细信息
在我们的仪表板上审核您新的匹配系统的详细信息,一旦它被初始化:

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

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

查看更多操作,打开 授权 标签并选择:
身份验证类型 - API 密钥,
密钥 - “Authorization”
值 - 在此处插入您的 AuthToken 值,
添加到 - 头部。
按下 (CTRL/CMD+S
) 或保存图标以 保存更改。您 Postman 标签中的橙色点应消失。
在您的匹配系统集合中,选择 票据 和 创建匹配票据,打开一个新标签。
选择 主体 标签预览您的 玩家票据请求:
注意 player_ip
设置为 null
- 这将导致使用自动添加到您的请求中的 IP 地址(请参见 服务器到服务器集成 以获取替代方案),
profile
指的是您的 匹配配置文件,attributes
包括适用于您的匹配系统规则的值,在这种情况下是latencies
规则,规则
player_count
是唯一不需要任何属性的玩家票据规则。
注意: 请确保参考示例的 Swagger 导入配置。
点击 发送 并审查您的玩家票据请求的响应:
id
是您的唯一匹配票据 ID,保存此信息以便后续检查您的票据,profile
确认所选择的 匹配配置文件,group_id
是为每个票据颁发的唯一组 ID,独立玩家表示为一个组,请参见 以团队加入 与您的朋友或大厅进行匹配,
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 - 虚幻引擎 Edgegap 集成工具包,
下载示例项目 并根据您的需要自定义。
在 游戏客户端中,确保您处理不可重试的错误:
HTTP 404 未找到
- 票据已被删除,HTTP 500 内部服务器错误
- 临时服务中断。
在 游戏服务器中,处理玩家偏好和初始服务器上下文。无需 API 集成:
读取 注入的环境变量(Gen2) 以检索初始玩家的匹配数据。
读取 注入的环境变量(应用版本) 以获取特定于版本的参数、设置(玩家容量)和机密。
读取 注入的环境变量(部署) 以获取部署信息,例如 IP 地址、位置等。
一旦玩家连接, 游戏服务器和游戏客户端 开始加载场景以执行同步步骤(例如选择和加载地图/场景/关卡)。我们建议使用完整的 3D 场景、类似大厅的社交 UI 或带进度条的加载屏幕,以指示初始化正在进行。
一旦 游戏客户端 完全加载,玩家加载/旅行到主要游戏场景。
可选地, 游戏服务器 可以创建和管理 填补 和玩家容量(添加或替换离开的玩家)。
确保您的 部署将正确停止 使用 注入 DELETE_URL,如果:
没有玩家加入比赛,
所有玩家都已离开比赛,
比赛结束正确。
恭喜您,您已完成 Edgegap 匹配器集成!如果您想了解更多,请在我们的 学习中心 阅读所有内容。
书写者
Edgegap团队