如何在MOBA中添加匹配机制

关键洞察

关键洞察

关键洞察

Edgegap的 matchmaking 是一个全托管、无限自定义的 matchmaking 系统,能够最佳地将全球玩家分组 - 在您开发 MOBA 游戏期间其使用是免费的。

它也是我们所知的唯一具备基于延迟的 matchmaking 规则的 matchmaking 系统,能够为您的游戏提供理想的在线多人体验,无论引擎(Unity、Unreal等)或游戏服务(EOS、UGS、PlayFab、Heroic Labs Nakama、Braincloud等)如何。

由于我们的 matchmaker 是基于参数的,因此无需编写代码。因此集成非常简单,如果需要,我们的入门指南会在每一步中帮助您。

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

如何在您的 MOBA 中集成匹配系统

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

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

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

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

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

五个步骤将我们的匹配系统集成到您的游戏中:

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

  2. 现在,您绝不应该盲目遵循在互联网上找到的 JSON 示例,因此强烈建议您根据您的游戏调整以上规则。第二步(“探索配置”)是我们的“如何阅读”,介绍每个匹配系统规则函数的功能(“探索配置”)。

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

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

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

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

1. 设置免费套餐

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

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

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

  • 然后,为您的 MOBA 游戏上传以下简单示例作为 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
            }
          }
        }
      }
    }
  }
}

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

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

您现在可以继续下一步。

2. 探索配置

独特的 MOBA 游戏规则

针对 MOBA 游戏,您可以为游戏模式定义多个 匹配资料 特定的规则和设置:

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

  • 限制排名差距,仅允许相同排名的对手参加排位赛,

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

  • 添加 中心选择 UI 来限制对手在指定的 延迟信标内,

  • 将 匹配延迟 限制在最大阈值,以防止匹配远距离的玩家,

  • 将 匹配延迟 限制在最大差异,以最大化延迟公平,

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

  • 作为小组加入 以预制大堂或在不超过团队规模的情况下填充团队。

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

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

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

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

创建具有较高排名的票据以进行晋升赛,以便匹配更强的对手。

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

语义版本控制

每个新版本使用 语义版本控制 通过解释格式 major.minor.patch 清楚地传达变更的影响:

  • major 版本包括重大更改,需要进行集成审查,

  • minor 版本包括实质性向后兼容的改进,

  • patch 版本包括错误修复和小改进。

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

为确保意外的客户端崩溃或被丢弃的票据不会持续存在并占用您的匹配器资源,票据将在 ticket_expiration_period 后被取消,导致其状态更改为 已取消 ,然后在 ticket_removal_period 后永久删除。

我们匹配逻辑的核心配置在 匹配资料中。每个档案都是一个完全隔离的匹配队列,指向具有预定义数量所需的 CPU 和内存(RAM)资源的应用版本

初始规则集中必须满足的匹配规则 条件由三个属性定义:

  • 您选择的名称,例如 - 匹配大小

  • 规则类型,也称为操作符,例如 - 玩家计数

  • 最后是操作符属性,例如 团队计数 或 团队大小

玩家计数规则

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

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

  • 团队大小 指每个团队的 玩家人数。

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

请注意,

书写者

Edgegap团队