如何在Unity引擎的多人游戏中添加 matchmaking

如何为多玩家Unity游戏添加匹配机制
如何为多玩家Unity游戏添加匹配机制
如何为多玩家Unity游戏添加匹配机制

关键洞察

关键洞察

关键洞察

Edgegap 的 匹配系统 是一个完全托管、无限自定义的匹配系统,能够优化全球玩家的分组——在开发你的休闲多人游戏期间使用是免费的。

这也是我们所知道的 唯一 拥有 基于延迟的匹配规则 的匹配系统,能够为你的游戏提供理想的在线多人体验,无论使用何种引擎(Unity、Unreal 等)或游戏服务(EOS、UGS、PlayFab、Heroic Labs Nakama、Braincloud 等)。

由于我们的匹配系统基于参数,因此无需编写代码。集成非常简单,如果需要,我们的 入门指南 将在每一步中指导你。

当你的游戏上线时,由于我们的匹配系统是完全托管的,你无需处理基础设施、错误、停机、可扩展性或数据库管理。我们会为你处理所有的事情。将你的 DevOps 工作负载减少到几乎为零。

如何将对局配对集成到您的Unity引擎多人游戏中

-> 本文基于對局配對文档。如果您遇到问题或差异,请务必参考原始指南,因为它们更频繁地保持更新。

以下示例将帮助您测试Unity引擎多人游戏的核心对局配对玩家流程,具体如下:

  • 在共享托管集群上创建配对实例,

  • 在您的配对配置中定义规则和设置,

  • 最后,使用我们的玩家票证API来测试玩家流程和管理。

五个步骤将我们的配对器实现到您的游戏中:

  1. 第一步是创建一个账户并使用我们的简单游戏示例。好了,您(技术上)距离完成已经走了一半!您只需要在游戏中集成配对器即可(参见步骤5)。

  2. 现在,您永远不应盲目跟随您在互联网上找到的JSON示例,因此强烈建议根据上述规则适应您的回合制游戏。步骤2(“探索配置”)是我们的“如何阅读”,深入研究每个对局配对规则功能(“探索配置”)。

  3. 步骤3(“审查实例详细信息”)涵盖您的个人、特定配对器以确保它已部署并适用于您的游戏设计。

  4. 正如名称所暗示的步骤4(“4. 测试票证API”),完全是关于测试您的對局配對请求是否从玩家处被接收到配对器,称为票证

  5. 步骤5(“将对局配对整合到您的游戏中”)重点介绍了如何在您的引擎项目中集成配对器。

如果您遇到故障排除挑战,我们的深入学习中心有更多故障排除提示。

Unreal教程 - 增加Edgegap的对局配对

如果这看起来很令人生畏,我们为您提供了解决方案——观看逐步集成视频:

1. 设置免费套餐

注册您的免费Edgegap账户,然后导航到 Matchmaker仪表板页面

从那里开始,点击 创建Matchmaker ,然后输入:

  • 为您的配对器命名 - 这纯粹是为了您自己的参考,例如 quickstart-dev

  • 然后,上传以下简单示例作为Unity引擎游戏的JSON配置:

{
  "version": "2.1.0",
  "inspect": true,
  "max_deployment_retry_count": 3,
  "ticket_expiration_period": "5m",
  "ticket_removal_period": "1m",
  "profiles": {
    "simple-example": {
      "application": {
        "name": "my-game-server",
        "version": "2024.01.30-16.23.00-UTC"
      },
      "rules": {
        "initial": {
          "match_size": {
            "type": "player_count",
            "attributes": {
              "team_count": 1,
              "team_size": 2
            }
          },
          "beacons": {
            "type": "latencies",
            "attributes": {
              "difference": 50,
              "max_latency": 200
            }
          }
        },
        "expansions": {}
      }
    }
  }
}

(温馨提醒,请务必更改应用 名称 和 版本 以匹配您的 应用程序和版本!)

如果没有出现验证错误,请点击 创建并开始 并等待过程完成。这将导致一个新的免费群集启动,使用您的简单示例配对器。

您现在可以继续下一步。

2. 探索配置

语义版本控制

随着我们发布对对局配对的更新,每个新版本都使用 语义版本控制 通过解释格式主要.次要.补丁清楚地传达更改的影响:

  • 主要 版本包含重大更改,需要集成审核,

  • 次要 版本包含大量向后兼容的改进,

  • 补丁 版本包含错误修复和小改进。

某些 部署可能会导致错误。我们尝试通过自动重试部署最多max_deployment_retry_count次(无需客户确认)来解决此问题。

为了确保意外的客户端崩溃或放弃票证不会持续并占用您的配对器资源,票证将在ticket_expiration_period后取消,使其状态变为CANCELLED,然后在ticket_removal_period后永久删除。

我们的对局配对逻辑的核心配置在 对局配对配置文件 中。每个配置文件都是一个完全隔离的对局配对队列,指向 应用程序版本 ,具有预定义的所需CPU和内存(RAM)资源。

初始规则集中必须满足的对局配对规则 用于将玩家组合在一起,并由三个属性定义:

  • 您选择的名称,例如 - 比赛规模

  • 规则类型,也称为运算符,例如 - 玩家数量

  • 最后是运算符属性,例如 团队数量 或 团队大小

玩家计数规则

这是一个特殊规则,定义了需要多少玩家匹配以启动分配:

  • 团队数量 指的是团队数量,1个团队可用于合作或自由模式,

  • 团队大小 指的是 每个团队的玩家数量

我们的简单示例演示了一个有2名玩家的合作游戏。

请注意,"玩家计数"规则是在您的初始配置规则中所需且只能定义一次

延迟规则

使用此规则为所有玩家提供尽可能最低的ping。当客户端测量并提交其相对于所有可用信标的往返时间(ping)之后,Gen2只会考虑特定 差异 内的匹配,针对 Ping信标测量。这提供了一个“软”解决方案以拆分您的玩家基础,启用与邻近区域的匹配,特别是改善较少人口区域的匹配速度。使用max_latency来防止与远处的玩家匹配。

您现在可以继续下一步。

我们的示例信标规则如上,具有"差异": 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架构。

  • 授权令牌 是用于游戏客户端和游戏服务器身份验证的唯一秘密令牌。

要使用API测试您的新配对器, 您将需要Swagger URL、API URL和授权令牌

您现在可以继续下一步。

4. 测试票证API

首先, 打开您的Swagger URL 以检查您的openAPI架构在swagger GUI中

点击“Matchmaker”标题下的/...swagger.jsonURL以打开原始JSON架构:

将此页面另存为驱动器上的文件(CTRL/CMD+S)。

打开您的 Postman应用 并登录您的免费账户。

从上一步进行导入您的 swagger.json 文件:

  • 保持 Postman集合 选中,

  • 选择 查看导入设置 并将设置 参数生成 更改为 示例

确认导入,这将在左侧的集合列表中出现一个名为Matchmaker的新集合。

查看更多操作,打开标签 授权 并选择:

  • 验证类型 - API密钥

  • 键 - “授权

  • 值 - 在此处插入您的 AuthToken 值,

  • 添加到 - Header

按(CTRL/CMD+S)或保存图标以 保存更改。您在Postman标签中的橙色点应消失。

在您的Matchmaker集合中,选择 tickets 并 创建一个对局配对票证,打开一个新标签。

选择标签 Body 以预览您的 玩家票证请求

注意 player_ip 设置为 null- 这将导致自动将IP地址添加到您的请求中(参见 服务器到服务器集成 以了解替代方案),

  • 配置文件 指的是您的 Matchmaking Profiles

  • 属性 包含您的配对规则的值,在这种情况下是 延迟 规则,

    • 规则 玩家计数 是唯一的规则,不需要在玩家票证中设置任何属性。

注意:请务必参考样本的Swagger的导入配置。 

点击 发送 并查看您的玩家票证请求的响应:

  • id 是您的唯一对局配对票证ID,保存以便稍后检查您的票证,

  • 配置文件 确认选择的 对局配对配置文件

  • group_id 是分配给每个票证的唯一组ID,单人玩家以1为一组表示,

  • player_ip 是无论使用何种识别方法,玩家的已解析公共IP地址,

  • assignment 设置为 null 以指示票证尚未匹配或被分配到服务器,

  • created_at 提供关于玩家票证何时创建的游戏UI使用信息,

  • status 表明票证的当前状态,所有票证开始于 SEARCHING (详见 对局配对进程)。

再次点击 发送 以创建第二个票证,这样我们的两位玩家将匹配并启动一个服务器。

在您的Matchmaker集合中,选择 {ticketId} 并 读取一个对局配对票证

输入上一步响应中的票证ID并点击 发送

查看您的玩家票证的更新分配:

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

再次点击 发送 以检查您的票证,并查看您的玩家票证的更新分配:

  • 状态更改为 HOST_ASSIGNED 其中 assignment 包含已分配服务器的详细信息。

 在我们的仪表板中检查您的新部署

  • 请注意,每个部署都标记了所有票证ID和配置文件,以增加可追溯性。

尝试从您的游戏客户端连接到已分配的服务器。

一旦您验证可以在没有问题的情况下连接到您的部署并且完成测试, 停止您的部署 以释放您帐户中的容量用于下一个构建。

您现在可以继续下一步。

5. 将对局配对集成到您的游戏中

Edgegap的对局配对集成:

  • 与 游戏客户端,以管理 玩家票证

  • 与 游戏服务器,以:

    • 处理通过其票证传递的玩家偏好,

    • 可选地支持 Backfill 以在开始后添加或替换玩家。

对于 游戏客户端,我们建议通过 对局配对过程 使用游戏内UI为玩家提供票证状态更新,以获得最佳玩家体验。参见:

在 游戏客户端中,确保您正在处理不可重试的错误:

  • HTTP 404 未找到 - 票证已被删除,

  • HTTP 500 内部服务器错误 - 临时服务中断。

在 游戏服务器中,处理玩家偏好和初始服务器上下文。无需API集成:

  1. 阅读 已注入的环境变量(Gen2) 以检索初始玩家的对局配对数据。

  2. 阅读 已注入的环境变量(应用程序版本) 了解版本特定的参数、设置(玩家容量)和秘密。

  3. 阅读 已注入的环境变量(部署) 了解部署信息,例如IP地址、位置或更多。

一旦玩家连接, 游戏服务器和游戏客户端 启动加载场景以执行同步步骤(例如选择和加载地图/场景/关卡)。我们建议使用完整的3D场景、大厅般的社交UI或带有进度条的加载屏幕,以指示初始化正在进行。

一旦 游戏客户端 完全加载,玩家将加载/进入主游戏场景。

可选地, 游戏服务器 可能创建和管理 Backfill 和玩家容量(添加或替换离开的玩家)。

确保您的 部署将正确停止 使用 已注入的DELETE_URL,如果:

  • 没有玩家加入比赛,

  • 所有玩家都已离开比赛,

  • 比赛正常结束。

恭喜您,您已经完成了Edgegap Matchmaker集成!如果您想了解更多,请在我们的学习中心中了解所有相关信息。

书写者

Edgegap团队

Get your Game Online Easily & in Minutes

Get your Game Online Easily & in Minutes

Get your Game Online Easily & in Minutes