如何向超休闲多人游戏添加匹配机制

关键洞察

关键洞察

关键洞察

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

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

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

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

如何将匹配系统集成到您的 Hypercasual 多人游戏中

-> 本文基于匹配系统文档。如果您遇到问题或不一致,请确保参考原始指南,因为它们通常更新得更频繁。

以下示例将帮助您测试核心匹配系统玩家流程,即:

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

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

  • 最后,测试玩家流程并使用我们的API管理玩家票务

将我们的匹配器整合到您的游戏中有五个步骤

  1. 第一步是创建一个账户并使用我们的 Hypercasual 游戏示例。好了,您(从技术上讲)已完成一半!您只需在您的游戏中集成匹配器(见第 5 步)。

  2. 现在,您应该永远不要盲目遵循在互联网上找到的 JSON 示例,因此强烈建议您根据您回合制游戏的规则调整上述内容。第 2 步(“探索配置”)是我们的“阅读方式”,讲解每个 匹配系统规则功能(“探索配置”)。

  3. 第 3 步(“审核实例详细信息”)涵盖您个人的特定匹配器,以确保其已部署并与您游戏的设计兼容。

  4. 第 4 步,顾名思义(“4. 测试票务 API”),专注于测试来自玩家的匹配请求是否被匹配器接收,称为票务

  5. 第 5 步(“在您的游戏中集成匹配系统”)突出了如何在您引擎的项目中集成匹配器。

如果您遇到故障排除挑战,我们的深度学习中心提供了额外的故障排除提示。

1. 设置免费套餐

注册您的免费 Edgegap 账户,并导航至匹配器仪表板页面

从那里,先点击创建匹配器,然后输入:

  • 您的匹配器的名称 - 这纯粹是供您参考,例如 quickstart-dev

  • 接下来,为您的 Hypercasual 游戏上传以下简单示例作为 JSON 配置:

{
  "version": "2.1.0",
  "inspect": true,
  "max_deployment_retry_count": 3,
  "ticket_expiration_period": "5m",
  "ticket_removal_period": "1m",
  "profiles": {
    "social-example": {
      "application": {
        "name": "my-game-server==>CHANGE-THIS",
        "version": "2024.01.30-16.23.00-UTC==>CHANGE-THIS"
      },
      "rules": {
        "initial": {
          "match_size": {
            "attributes": {
              "team_count": 1,
              "team_size": 30
            },
            "type": "player_count"
          },
          "beacons": {
            "attributes": {
              "difference": 80,
              "max_latency": 80
            },
            "type": "latencies"
          },
          "selected_region": {
            "type": "string_equality",
            "attributes": {
              "overlap": 1
            }
          },
          "selected_mode": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          }
        },
        "expansions": {
          "10": {
            "beacons": {
              "difference": 100,
              "max_latency": 100
            },
            "match_size": {
              "team_count": 1,
              "team_size": 20
            }
          },
          "15": {
            "beacons": {
              "difference": 120,
              "max_latency": 120
            },
            "match_size": {
              "team_count": 1,
              "team_size": 10
            }
          },
          "25": {
            "match_size": {
              "team_count": 1,
              "team_size": 4
            }
          },
          "30": {
            "match_size": {
              "team_count": 1,
              "team_size": 1
            }
          }
        }
      }
    }
  }
}

(温馨提示,请确保更改应用程序的 name 和 version 以匹配您的 应用程序和版本!)

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

您现在可以继续下一步。

2. 探索配置

独特的多人 Hypercasual 游戏规则

团队数量为 1,团队规模为 50,每场游戏需要 50 名玩家(所有玩家都在同一个团队中)。

特别针对社交游戏,您可以为游戏模式定义匹配配置文件,以指定规则和设置:

  • 让玩家提供他们的游戏模式偏好并选择一个适合每个人的模式,

  • 以组的形式加入来进行预设的大厅或填充团队而不超过团队数量,

  • 添加🗺️ 区域选择 UI以限制对手在指定区域,

  • 允许更高的延迟以优先选择拥有更多玩家的快速比赛,

  • 使用不同的🏷️ 应用程序版本来分配更多 CPU 或内存,当允许更多玩家时。

扩展限制以确保快速比赛:

  • 快速放宽延迟限制以寻找更多玩家,

  • 慢慢降低团队规模,以减少所需玩家,使游戏尽快开始,

    • 可以选择,您可以让服务器用 AI 玩家填补空缺,

  • 如果没找到队友,单独启动游戏并使用补充稍后添加玩家,

    • 这将允许玩家在现有比赛中加入,而不是新比赛,以最大化社交互动。

语义版本控制

随着我们向匹配器发布更新,每个新版本使用语义版本控制以清晰地传达更改的影响,通过解析格式 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 将仅考虑在特定的 difference 延迟值范围内进行匹配,测量方法是与 延迟信标进行比较。这提供了一种“软”解决方案,以划分您的玩家基础,从而能够与邻近区域进行匹配,尤其能够提高人员稀少地区的比赛速度。使用 max_latency来防止与远程玩家进行匹配。

您现在可以继续下一步。

我们上面的示例 信标 规则为 "difference": 50, "max_latency": 200 最初:

  • Alice 和 Bob 将匹配,因为北京被丢弃(>200),其余在 | A-B | < 50:

    • Alice {蒙特利尔: 12.3, 纽瓦克: 45.6, 达拉斯: 59.9, 北京: 264.4}; 和

    • Bob {蒙特利尔: 27.3, 纽瓦克: 32.4, 达拉斯: 23.1, 北京: 252.2}。

  • Charlie 和 Dave 不会匹配,因为 | C-D | > 50 对于达拉斯信标:

    • Alice {蒙特利尔: 5.7, 纽瓦克: 44.2, 达拉斯: 59.5, 北京: 263.2}; 和

    • Bob {蒙特利尔: 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 以检查您在 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 提供有关玩家票务创建时间的信息,以供游戏 UI 使用,

  • status 表示票务的当前状态,所有票务开始时状态为 搜索中 (请参见 匹配过程 了解更多细节)。

通过再次点击 发送 来创建第二张票务,以便我们的两名玩家匹配并启动服务器。

在您的匹配器集合中,选择 {ticketId} 并 读取匹配票务

在上一步中输入票务 ID 并点击 发送

审核您玩家票务的最新分配:

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

再次点击 发送 以检查您的票务,并审核您玩家票务的最新分配:

  • 状态更改为 主机已分配 ,包含有关分配服务器的详细信息的 assignment

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

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

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

一旦您确认可以无问题地连接到您的部署并完成测试, 停止您的部署 以释放您账户中的容量,以便下一个构建。

您现在可以继续下一步。

5. 在您的游戏中集成匹配器

Edgegap 的匹配系统集成:

  • 与 游戏客户端集成,管理 玩家票务

  • 与 游戏服务器集成,以:

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

    • 可选择支持 补充 在启动后添加或替换玩家。

在 游戏客户端中,我们建议在整个匹配过程 中为玩家提供票务状态更新,使用游戏内 UI 以获得最佳玩家体验。见:

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

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

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

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

  1. 读取 注入的环境变量(Gen2) 以获取初始玩家的匹配数据。

  2. 读取 注入的环境变量(应用版本) 获取特定版本的参数、设置(玩家容量)和机密。

  3. 读取 注入的环境变量(部署) 获取部署信息,例如 IP 地址、位置等。

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

一旦 游戏客户端 完全加载,玩家加载/旅行到主要游戏场景。

可选择, 游戏服务器 可以创建和管理 补充 以及玩家容量(添加或替换离开的玩家)。

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

  • 没有玩家加入比赛,

  • 所有玩家都离开比赛,

  • 比赛正确结束。

恭喜您,您已完成 Edgegap 匹配器集成!如果您想了解更多,请在我们的学习中心中阅读所有内容。

书写者

Edgegap团队