如何为多人自由竞争游戏添加匹配机制

关键洞察

关键洞察

关键洞察

Edgegap 的 配对系统 是一个完全托管的、可无限定制的配对系统,能够在全球范围内优化地将玩家分组——在开发您的多人自由竞技游戏期间使用是免费的。

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

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

当您的游戏上线时,由于我们的配对系统是完全托管的,您无需处理基础设施、错误、故障、可扩展性或数据库管理。我们会为您处理所有事务,使您的 DevOps 工作负载降到几乎为零。

如何将对局配对集成到您的多人免费游戏中

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

以下示例将帮助您测试核心 matchmaking 玩家流程,即:

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

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

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

将我们的对局配对集成到您的游戏中有五个步骤

  1. 第一步是创建一个账户并使用我们的策略游戏示例。Voilà,您(技术上)完成了一半!您只需将对局配对集成到您的游戏中(见步骤5)。

  2. 现在,您绝不应该盲目遵循在互联网上找到的JSON示例,因此强烈建议您根据以上规则调整您的免费游戏。步骤2(“探索配置”)是我们的“阅读指南”,深入介绍对局配对规则功能(“探索配置”)。

  3. 步骤3(“审查实例详情”)涵盖您的个人、特定的对局配对以确保它已部署并与您的游戏设计兼容。

  4. 步骤4,如其名称所示(“4. 测试票API”),完全是测试您的对局配对请求是否从玩家接收,被称为

  5. 步骤5(“将對局配對集成到您的游戏中”)强调如何将对局配对集成到您的引擎项目中。

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

1. 设置免费套餐

注册您的免费Edgegap帐户,并导航至 对局配对仪表板页面

从那里开始,点击 创建对局配对 ,然后输入:

  • 对局配对的名称 - 纯粹供您参考,例如 quickstart-dev

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

{
  "version": "1.0.0",
  "max_deployment_retry_count": 3,
  "ticket_expiration_period": "5m",
  "ticket_removal_period": "1m",
  "profiles": {
    "casual-example": {
      "application": {
        "name": "my-game-server=>CHANGE-THIS-NAME-HERE",
        "version": "2024.01.30-16.23.00-UTC=>CHANGE-THIS-HERE "
      },
      "rules": {
        "initial": {
          "match_size": {
            "type": "player_count",
            "attributes": {
              "team_count": 2,
              "team_size": 5
            }
          },
          "beacons": {
            "type": "latencies",
            "attributes": {
              "difference": 25,
              "max_latency": 100
            }
          },
          "league_rank": {
            "type": "number_difference",
            "attributes": {
              "max_difference": 1
            }
          },
          "selected_maps": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          },
          "selected_beacons": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          }
        },
        "expansions": {
          "10": {
            "beacons": {
              "difference": 40,
              "max_latency": 150
            }
          },
          "30": {
            "beacons": {
              "difference": 50
            }
          },
          "60": {
            "league_rank": {
              "max_difference": 2
            }
          },
          "180": {
            "beacons": {
              "difference": 100,
              "max_latency": 500
            }
          }
        }
      }
    },
    "competitive-example": {
      "application": {
        "name": "my-game-server",
        "version": "2024.01.30-16.23.00-UTC"
      },
      "rules": {
        "initial": {
          "match_size": {
            "type": "player_count",
            "attributes": {
              "team_count": 2,
              "team_size": 5
            }
          },
          "beacons": {
            "type": "latencies",
            "attributes": {
              "difference": 25,
              "max_latency": 100
            }
          },
          "league_rank": {
            "type": "number_difference",
            "attributes": {
              "max_difference": 0
            }
          },
          "selected_maps": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          },
          "selected_beacons": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          }
        },
        "expansions": {
          "30": {
            "beacons": {
              "difference": 40,
              "max_latency": 150
            }
          },
          "60": {
            "beacons": {
              "difference": 50
            }
          },
          "180": {
            "beacons": {
              "max_latency": 250
            }
          }
        }
      }
    },
    "challenger-example": {
      "application": {
        "name": "my-game-server",
        "version": "2024.01.30-16.23.00-UTC"
      },
      "rules": {
        "initial": {
          "match_size": {
            "type": "player_count",
            "attributes": {
              "team_count": 2,
              "team_size": 5
            }
          },
          "beacons": {
            "type": "latencies",
            "attributes": {
              "difference": 25,
              "max_latency": 100
            }
          },
          "league_rank": {
            "type": "number_difference",
            "attributes": {
              "max_difference": 0
            }
          },
          "selected_maps": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          },
          "selected_beacons": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          }
        },
        "expansions": {
          "30": {
            "beacons": {
              "difference": 40,
              "max_latency": 150
            }
          },
          "180": {
            "beacons": {
              "difference": 50
            }
          },
          "240": {
            "beacons": {
              "max_latency": 250
            }
          }
        }
      }
    }
  }
}

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

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

您现在可以进行下一步。

2. 探索配置

独特的免费游戏规则

特别是对于FFA游戏,您可以定义多个 对局配对配置文件 以适用特定规则和设置的游戏模式:

  • 限制排名在两名玩家之间的差异以适应更休闲的游戏,

  • 限制排名差异仅允许同等级对手进行排名游戏,

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

  • 添加 枢纽选择UI 以限制对手至指定的 信标

  • 限制 对局配对延迟 至最大阈值以防止匹配到遥远的玩家,

  • 限制 对局配对延迟 至最大差异以最大化ping的公平性,

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

  • 组队加入 用于预组建的大厅或在不超过团队规模的情况下填充队伍。

从理想条件开始,扩大限制 以确保快速匹配:

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

  • 缓慢增加允许的排名差异以找到更多玩家,

  • 增加扩展之间的时间以适应较高排名(挑战者),因为可用的玩家较少。

创建拥有较高排名的票以进行晋升比赛,与更强的对手匹配。

定义 独立的作弊者档案 以确保被标记为作弊者或收到大量管理报告的玩家不会对排位赛中的合法玩家体验造成负面影响。

语义版本化

每个新版本使用 语义版本化 通过解释格式 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 指 每个团队内的玩家数量。

我们的简单示例展示了一个二人合作游戏。

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

延迟规则

使用此规则为所有玩家提供最低可能的ping。一旦客户端测量并提交其与所有可用信标的往返时间(ping),Gen2将仅考虑在特定差异内的匹配,测量结果与 信标进行比较。这提供了一种“软”解决方案,将您的玩家群体进行分割,允许与邻近地区进行匹配,尤其是提高了较少人口地区的匹配速度。使用最大延迟防止与地理位置较远的玩家匹配。

您现在可以进行下一步。

我们的示例 beacons 规则和"difference": 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 是一个方便的开放API规范GUI,我们提供来探索API架构。

  • 认证令牌 是一个私密的唯一令牌,由游戏客户端和游戏服务器用于认证。

要使用API测试您的新对局配对,您将需要Swagger URL、API URL和认证令牌

您现在可以进行下一步。

4. 测试票API

首先,打开您的Swagger URL 以在swagger GUI中查看您的开放API架构

点击

书写者

Edgegap团队

Get your Game Online Easily & in Minutes

Get your Game Online Easily & in Minutes

Get your Game Online Easily & in Minutes