
如何为多人体育游戏添加匹配功能
Edgegap 的 匹配系统 是一个完全管理的、无限可定制的匹配系统,可以最佳地将全球玩家分组——而且在开发您的多人运动游戏期间,它的使用是免费的。
它也是 唯一的 匹配系统(我们所知)具有 基于延迟的匹配规则,为您的游戏提供理想的在线多人体验,无论是引擎(Unity、Unreal 等)还是游戏服务(EOS、UGS、PlayFab、Heroic Labs Nakama、Braincloud 等)。
由于我们的匹配系统是基于参数的,因此无需编写代码。因此,集成非常简单,如有需要,我们的 入门指南 会指导您每一步。
当您的游戏上线时,由于我们的匹配系统是完全管理的,您无需处理基础设施、错误、故障、可扩展性或数据库管理。我们会为您处理所有这些,几乎将您的 DevOps 工作量减少到零。
如何将匹配系统集成到您的多人体育游戏中
-> 本文基于 匹配系统文档。如果您遇到问题或不一致,请确保参考 原始指南,因为它们会更频繁地保持最新。
以下示例将帮助您测试核心 匹配 玩家流程,即:
将我们的匹配系统集成到您的游戏中有 五个步骤:
第一步是 创建一个账户 并使用我们的策略游戏示例。瞧,您已经(技术上)完成了一半!您只需要将匹配系统集成到您的游戏中(见第5步)。
现在,您绝不能盲目遵循您在互联网上找到的JSON示例,因此强烈建议您根据您的体育游戏调整上述规则。第2步(“探索配置”)是我们的“如何阅读”,详细说明每个 匹配 规则函数的功能(“探索配置”)。
第3步(“查看实例详情”)涵盖了您个人的特定 匹配实例,以确保它已部署并与您的游戏设计兼容。
第4步,如名称所示(“4. 测试票务API”),全是关于测试玩家的匹配请求是否被匹配系统接收,它称为 票务。
第5步(“在您的游戏中集成匹配系统”)强调如何在您引擎的项目中集成匹配系统。
如果您遇到故障排除挑战,我们深入的 学习中心 有更多故障排除提示。
1. 设置免费套餐
注册您的免费Edgegap账户,并导航至 匹配系统仪表板页面。
从那里,首先点击 创建匹配系统 ,然后输入:
一个匹配系统的名称 – 这仅仅是为了您自己的参考,例如
quickstart-dev
,然后,上传以下简单示例作为您体育游戏的JSON配置:
(善意提醒,请确保更改应用程序 名称
和 版本
以匹配您的 应用程序和版本!)
如果没有出现验证错误,点击 创建并启动 并等待过程完成。这将导致一个新的免费集群启动,您简单示例的匹配系统也随之创建。
您现在可以继续下一步。
2. 探索配置
独特的体育游戏规则
专为体育游戏,您可以为游戏模式定义多个 匹配配置文件 的特定规则和设置:
限制两名玩家之间的段位差距以适应更休闲的游戏,
限制段位差距,仅允许同段位的对手进行排名游戏,
让玩家提供地图偏好并选择适合所有人的地图,
限制 匹配延迟 达到最大阈值,以防止匹配远离的玩家,
限制 匹配延迟 达到最大差异以最大化延迟公平性,
在允许更多玩家时使用不同的 应用版本 分配更多的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名玩家的合作游戏。
请注意,“玩家数量”规则 是必需的,并且只能在初始配置规则中定义一次。
延迟规则
使用此规则为所有玩家提供尽可能低的延迟。一旦客户端测量并提交他们的往返时间(延迟)与所有可用信标,Gen2将只考虑在特定 差异
的延迟值内进行匹配,测量相对于 延迟信标。这为您的玩家基础提供了“软性”解决方案,能够与邻近地区进行匹配,特别改善了人流量较少地区的比赛速度。使用 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密钥,
键 - “授权”
值 - 在这里插入您的 AuthToken 值,
添加到 - 头部。
按下(CTRL/CMD+S
)或保存图标以 保存更改。您Postman标签中的橙点应消失。
在您的匹配系统集合中,选择 票务 并 创建一个匹配票务,打开一个新标签。
选择标签 正文 以预览您的 玩家票务请求:
注意 player_ip
设置为 null
- 这将导致使用自动添加到您的请求中的IP地址(请参见 服务器到服务器集成 以获取替代方案),
profile
指的是您的 匹配配置文件,attributes
包括您匹配系统规则的值,在这种情况下是针对latencies
规则,规则
player_count
是唯一一条在玩家票务中不需要任何属性的规则。
注意:请确保参考示例的 Swagger的导入配置。
点击 发送 并查看您玩家票务请求的响应:
id
是您唯一的匹配票务ID,请保留此ID以便稍后检查您的票务,profile
确认所选择的 匹配配置文件,group_id
是发给每个票据的唯一组ID,单个玩家被表示为一个组,参见 以小组身份加入 以与您的朋友或队伍匹配,
player_ip
是玩家的公网IP地址,无论使用何种身份识别方法,assignment
设置为 null 以表明票务还没有被匹配或分配到服务器,created_at
提供有关玩家票务创建时间的信息,供游戏用户界面使用,status
指示票务的当前状态,所有票务开始时为搜索中
(有关详细信息,请参见 匹配过程)。
通过再次点击 发送 创建第二个票务,以便我们的两名玩家匹配并启动服务器。
在您的匹配系统集合中,选择 {ticketId} 并 读取匹配票务。
从上一步的响应中输入票务ID并点击 发送。

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

再次点击 发送 以检查您的票务,并查看您玩家票务的更新分配:
状态更改为
主机已分配
,并且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团队