如何在COOP多人游戏中添加匹配机制

如何向COOP多人游戏添加 matchmaking
如何向COOP多人游戏添加 matchmaking
如何向COOP多人游戏添加 matchmaking

关键洞察

关键洞察

关键洞察

Edgegap 的 匹配器 是一个完全托管、无限定制的匹配系统,能够最佳地将全球玩家分组——在您的合作多人游戏开发期间,它的使用是免费的。

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

由于我们的匹配器是基于参数的,因此无需编写代码。集成非常简单,如有需要,我们的 入门指南 会陪伴您每一步。

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

如何将匹配机制集成到您的合作模式多人游戏中

-> 本文基于匹配机制文档。如果您遇到问题或差异,请确保参考原始指南,因为它们更经常保持更新。

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

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

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

  • 最后,测试玩家流并通过我们的API管理玩家票据

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

  1. 第一步是创建一个帐户并使用我们的合作游戏示例。,您已经(技术上)完成了一半!您只需将匹配器集成到您的游戏中(参见第5步)。

  2. 现在,您绝对不应盲目遵循您在互联网上找到的JSON示例,因此强烈建议将上述规则调整为您的回合制游戏。第2步(“探索配置”)是我们的“如何阅读”,涉及到每个匹配机制规则功能(“探索配置”)。

  3. 第3步(“审查实例详情”)涵盖您的个人特定匹配器,以确保它已部署并与您的游戏设计一起工作。

  4. 第4步,顾名思义(“4. 测试票据API”),完全是关于测试玩家的匹配请求是否被匹配器接收,即票据

  5. 第5步(“将匹配机制集成到您的游戏中”)强调如何在您引擎的项目中集成匹配器。

如果您在故障排查过程中遇到困难,我们的深入学习中心提供了额外的故障排查技巧。

1. 设置免费层

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

然后,首先单击创建匹配器,然后输入:

  • 您匹配器的名称 – 仅供您参考,例如 quickstart-dev

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

{
  "version": "2.1.0",
  "inspect": true,
  "max_deployment_retry_count": 3,
  "ticket_expiration_period": "5m",
  "ticket_removal_period": "1m",
  "profiles": {
    "cooperative-example": {
      "application": {
        "name": "my-game-server=>CHANG-THIS-HERE",
        "version": "2024.01.30-16.23.00-UTC=>CHANG-THIS-HERE"
      },
      "rules": {
        "initial": {
          "match_size": {
            "type": "player_count",
            "attributes": {
              "team_count": 1,
              "team_size": 4
            }
          },
          "beacons": {
            "type": "latencies",
            "attributes": {
              "difference": 60,
              "max_latency": 60
            }
          },
          "selected_map": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          },
          "selected_difficulty": {
            "type": "string_equality"
          },
          "player_level": {
            "type": "number_difference",
            "attributes": {
              "max_difference": 10
            }
          }
        },
        "expansions": {
          "5": {
            "beacons": {
              "difference": 80,
              "max_latency": 80
            }
          },
          "10": {
            "player_level": {
              "max_difference": 20
            }
          },
          "20": {
            "match_size": {
              "team_count": 1,
              "team_size": 3
            },
            "beacons": {
              "difference": 100,
              "max_latency": 100
            }
          },
          "30": {
            "match_size": {
              "team_count": 1,
              "team_size": 2
            },
            "beacons": {
              "max_latency": 200
            }
          },
          "60": {
            "match_size": {
              "team_count": 1,
              "team_size": 1
            }
          }
        }
      }
    }
  }
}

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

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

您现在可以继续进行下一步。

2. 探索配置

独特的多人合作游戏规则

专门针对合作游戏,您可以为特定规则和设置定义多个 匹配机制配置文件

  • 让玩家提供他们的地图偏好,并选择适合所有人的地图,

  • 让玩家选择适合每个人技术水平的特定游戏难度,

  • 限制玩家水平差异,以使玩家与类似的游戏进展程度保持一致,

  • 作为组加入 预制大厅或填补队伍而不超过团队人数,

  • 允许更高的延迟以优先考虑更快的比赛,并提供更好的细粒度玩家偏好,

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

从理想条件开始,并且 扩展限制 以确保快速比赛:

  • 随着时间的推移放宽延迟限制以找到更多玩家,

  • 逐渐减小团队人数以减少所需的玩家并尽早开始游戏,

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

  • 逐渐增加允许的玩家水平差异以找到更多玩家,

  • 如果未找到队友,则以单人身份启动游戏,并使用 填补位置 稍后添加玩家。

语义版本控制

当我们发布更新到匹配器时,每个新版本使用 语义版本控制 以清晰传达更改的影响,通过解释格式 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 以检查您的openAPI架构在swagger GUI中

单击“匹配器”标题下方的/...swagger.json URL以打开原始JSON架构:

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

打开您的 Postman应用程序 并登录到您的免费帐户。

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

  • 保持选中 Postman集合 ,

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

确认导入,这将导致集合列表中出现名为“匹配器”的新集合。

查看更多操作,打开选项卡 授权 并选择:

  • 授权类型 - API密钥

  • 键 - “授权

  • 值 - 在这里插入您的 认证令牌 值,

  • 添加到 - 头部

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

在您的匹配器集合中,选择 票据 并 创建匹配票据,打开一个新选项卡。

选择选项卡 主体 以预览您的 玩家票据请求

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

  • profile 指的是您的 匹配机制配置文件

  • attributes 包括用于您的匹配器规则的值,在此情况下适用于 延迟 规则,

    • 规则 player_count 是唯一在玩家票据中不需要任何属性的规则。

注意: 请确保参考示例的Swagger的导入配置

单击 发送 并检查您对玩家票据请求的响应:

  • id 是您的唯一匹配票据ID,请保存该值以便稍后检查您的票据,

  • profile 确认选择了 匹配机制配置文件

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

    • 有关与朋友或大厅进行匹配的内容,请参见 作为组加入

  • player_ip 是玩家解析的公共IP地址,无论所使用的身份验证方法如何,

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

  • created_at 提供有关玩家票据何时创建的信息,以供游戏用户界面使用,

  • status 指示票据的当前状态,所有票据初始状态为 SEARCHING (详见 匹配机制过程 了解更多信息)。

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

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

输入上一步响应中的票据ID,然后单击 发送

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

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

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

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

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

  • 注意每个部署都标记有所有票据ID和配置文件,以便更好地可追溯性。

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

一旦您验证能够毫无问题地连接到您的部署并完成测试,请 停止您的部署 以腾出帐户中的容量以供下一个构建使用。

您现在可以继续进行下一步。

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

Edgegap的匹配机制集成:

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

  • 与 游戏服务器,以:

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

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

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

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

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

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

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

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

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

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

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

一旦 游戏客户端 完全加载,玩家就会加载/移动到主要的游戏场景。

可选择地, 游戏服务器 可以创建和管理 填补位置 和玩家容量(增加或替换离开的玩家)。

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

  • 没有玩家加入比赛,

  • 所有玩家已离开比赛,

  • 比赛正常结束。

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

书写者

Edgegap团队