Amazon GameLift
开发人员指南 (版本 )
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Amazon GameLift FlexMatch 的工作原理

本主题简要介绍 FlexMatch 对战,包括主要功能、组件,以及对战过程的工作原理。有关在游戏中添加 FlexMatch 的详细帮助,包括如何设置对战构建器和自定义玩家匹配的信息,请参阅添加 FlexMatch 对战

Amazon GameLift FlexMatch 是一项可自定义的对战服务。它提供了多个灵活的工具,让您能够通过最适合您游戏的方法来管理整个对战体验。使用 FlexMatch,您可以为游戏对战构建团队,选择兼容的玩家并查找最佳可用托管资源来实现最优玩家体验。您还可以使用 FlexMatch 回填来为现有游戏查找新玩家,以便游戏在游戏会话的整个生命周期内一直有兼容的玩家进入,以获得可能的最佳玩家体验。

利用 FlexMatch,您可以尽可能多地创建并运行对战构建器来适应您的游戏模式和玩家。例如,您可能有不同的对战构建器来为混战和铁笼赛组建团队。

FlexMatch 主要功能

  • 自定义玩家对战。 设计和构建您的玩家将认为最具吸引力的多人游戏体验类型。对于每种游戏模式,定义团队结构并设置其他游戏属性。构建一组自定义规则以评估玩家属性 (如技能级别或角色) 并为游戏组建最可能的玩家对战。使用这些规则针对新对战将玩家分组或查找玩家以填充现有对战中的空位置 (以下简称“对战回填”)。

  • 创建大型对战。 FlexMatch 可用于使用简化匹配过程的大型对战算法创建非常大的对战 - 41 位到 200 位玩家。在创建大型对战时,您可以选择优先创建具有更多类似玩家的更大型对战,或优先创建所有玩家都将获得可能的最佳玩家延迟体验的对战。

  • 获取玩家接受。 需要所有玩家接受建议的对战,然后再开始。如果启用此功能,FlexMatch 会等待分配给某一对战游戏的所有玩家接受它,然后才开始对战游戏。

    支持玩家组队。为要组队一起玩游戏的一组玩家生成对战游戏。查找更多玩家以根据需要填充对战。

  • 根据延迟进行玩家对战。使用玩家延迟信息确保对战的玩家具有相似的响应时间。此功能避免了游戏中出现可能为部分玩家提供过多优势的不一致性。这在创建跨多个地理区域的对战时尤其有用。

  • 根据时间放松玩家匹配规则。 在创建最可能的玩家对战与让玩家快速进入合适的对战之间达到正确的平衡。您确定何时何处放松严格的对战规则,以便玩家等待进入游戏的时间最少。

  • 查找最佳托管资源。 使用游戏和玩家信息选择最佳可用资源来托管对战以获得最佳游戏体验。

  • 保证进入游戏的是匹配的玩家。 使用 FlexMatch 回填来在游戏会话的整个生命期让匹配良好的新玩家填充空玩家位置。您可以选择启用自动回填或向您的游戏添加代码来手动管理回填。

FlexMatch 组件

Amazon GameLift FlexMatch 需要以下三个关键组件协同工作:

  • 用于触发玩家对战的机制。 一种机制确定何时启动玩家对战。第二种机制(可选)确定何时为现有对战中的空位置查找新玩家(回填)。将对战请求和对战回填请求交给对战构建器处理。

  • FlexMatch 对战构建器将评估玩家并创建对战。 对战构建器将通过它收到的请求构建可能最佳的玩家对战。它有一个规则集来定义对战的团队结构并设置评估玩家是否对战时要使用的条件。一个游戏可具有多个对战构建器,每个对战构建器构建不同类型的对战。

  • 用于放置新对战的游戏会话队列。 游戏会话队列将查找可用的计算资源来托管对战。它确定在何处 (哪些区域) 查找资源以及如何为每个对战选择最佳的可用主机。

以下各节详述了对战如何继续构建新的游戏对战或为现有游戏对战查找新玩家。

对战过程

下面介绍了如何使用 FlexMatch 处理新游戏对战的请求。此描述假设客户端游戏服务将启动对战请求并跟踪对战票证状态。

  1. 请求对战。玩家可在您的游戏中采取某种操作来触发对战,如单击“立即加入”按钮或一组玩家组队。您的游戏将启动对战请求,标识要使用的对战构建器并包括要对战的一个或多个玩家。此请求包括对战构建器构建对战所需的任何玩家信息 (如技能水平或首选项)。每个请求都将获得一个对战票证 ID,您的游戏将使用此 ID 跟踪请求状态并根据需要采取操作。

  2. 发现潜在对战。 所有对战票证都将传递到指定的对战构建器并放置在票证池中进行处理。票证将保留在票证池中,直至它获得匹配或达到对战构建器的最大时间限制。

    为了为常规(非大型)对战查找匹配的玩家,对战构建器将持续通过票证池。在每次通过中,对战构建器将从池中最旧的票证开始并针对它评估其他票证以查找最佳可取的匹配。对战构建器的规则集确定 (1) 要为对战创建多少个团队,(2) 要为每个团队分配多少个玩家以及 (3) 如何评估每个潜在玩家。规则可能会针对单个玩家、团队或对战设置要求。例如,一个规则可能需要所有对战玩家具有某种才能,或者它可能需要团队中至少有一位玩家担任特定角色。一个常用规则是要求所有对战玩家都具有相似的技能评级。

    对于大型对战,此过程稍有不同。FlexMatch 不是根据一组规则评估每位玩家,而是根据单个重要平衡属性来衡量可用的对战票证,并对具有相似属性值的玩家进行分组。它还应用延迟要求。您可以选择创建玩家之间有更大相似性的更大型对战,或将玩家放入为他们带来可能的最佳延迟体验的对战。找到初始匹配后,FlexMatch 将执行一系列测试来确保最终匹配是可用的最佳解决方案。

    当对战构建器评估票证时,它将通过或否决整个票证。对于具有多个玩家的票证,对战构建器假设这些玩家需要一起游戏并且尝试将它们放入同一个对战中。这意味着,对于任何潜在对战,票证中的所有玩家必须是可接受的。如果任何玩家不符合任何规则,则整个票证都将被视为非对战项。失败的票证将留在票证池中并在下一次通过时再次评估。一旦填充了潜在对战,将更新对战中所有票证的状态。

  3. 获取玩家接受。如果对战构建器要求玩家接受潜在对战,在每个玩家接受之前,FlexMatch 不能继续匹配。对战票证状态将进行更改以指示需要接受,这将提示您的游戏请求每个对战票证中的所有玩家接受。

    玩家可以选择接受或拒绝潜在对战。您的游戏将收集玩家响应并将响应报告给 FlexMatch。潜在对战中的所有玩家必须在特定时间限制内接受对战才能继续。如果任何玩家拒绝对战或未能在时间限制之前响应,则对战构建器将放弃潜在对战。已接受对战的玩家的票证将返回到对战构建器的票证池中;未接受对战的玩家的票证将变为失败状态,并且不会再进行处理。

  4. 查找资源以托管对战。在进行并接受潜在对战之后,FlexMatch 将尝试使用可用托管资源放置对战。对战构建器配置为使用特定游戏会话队列,它会将潜在对战传递到该队列以进行放置。该队列将使用一组规则在区域和队组中搜索最佳可用服务器进程来托管对战。如果原始对战请求包含玩家延迟数据,则队列将使用此信息查找为对战中的玩家提供最低延迟和最一致的游戏体验的资源。

    在找到可用服务器进程之后,Amazon GameLift 将使用游戏属性和对战构建器数据创建游戏会话记录,其中包括团队结构和大小、玩家分配以及相关玩家特征。

  5. 启动新的游戏会话。 与启动任何新的游戏会话时一样,Amazon GameLift 将向服务器进程发送启动请求以及游戏会话和对战构建器信息。服务器进程将采用此信息并使用它为已对战的游戏启动新的游戏会话。当游戏会话准备好接受玩家时,服务器进程将通知 Amazon GameLift。

  6. 将玩家连接到新的游戏会话。 在游戏会话准备好接受玩家之后,Amazon GameLift 将为对战中的每个玩家创建新的玩家会话。然后它将更新所有对战票证,同时将票证状态更新为指示成功并添加所有玩家的连接信息。此票证状态更改将提示您的游戏将连接信息中继到游戏客户端。玩家现在可以加入游戏并声明其在对战和团队分配中的位置。

回填过程

下面介绍了如何使用 FlexMatch 为现有对战查找新玩家。由于对战回填需要有关游戏会话中玩家位置可用性的最新信息,因此我们建议从游戏服务器发起对战回填请求。另一个选项是使用客户端游戏服务 (如跟踪游戏会话和玩家活动的会话目录服务)。在 利用 FlexMatch 回填现有游戏 处查看有关向游戏添加对战回填功能的更多信息。

如果对战配置启用了自动回填,则过程类似。唯一不同的是,初始回填请求由 GameLift 而不是您的代码生成。自动回填请求在游戏会话具有空闲的玩家位置时触发。

  1. 请求回填对战。 已对战游戏具有需填充的空玩家位置。您的游戏将发起回填请求,同时标识要使用的对战构建器并描述游戏会话中的当前玩家。每个请求都具有一个对战票证 ID,您的游戏将使用此 ID 跟踪请求状态并根据需要采取操作。通过自动回填,此票证 ID 被添加到游戏会话的对战数据中。

  2. 发现潜在对战。 用于回填的对战票证将传递给指定的对战构建器并与新对战的票证放置在同一个池中。仅在大型对战中,回填票证优先于新匹配的票证。

    对战构建器对票证和玩家进行同等评估,不论票证是新玩家还是回填请求的票证。唯一的例外是,潜在对战不能有多个回填票证。回填票证必须与至少一个其他票证对战才能成功完成,即使在对战构建器的规则允许对战使用空玩家位置完成时也是如此。一旦填充潜在对战,将更新对战中所有票证的状态。

  3. 获取玩家接受。 如果需要接受,则只有新玩家需要接受回填对战,并且将按照有关对战请求的规定执行此步骤。当前玩家无需接受其已加入的对战。因此,即使回填请求的票证状态指示需要接受,您的游戏也不需要采取操作。

    如果建议的任何新玩家在时间限制内未能接受对战,将放弃潜在的对战并且不会向现有对战添加任何新玩家。在这种情况下,回填请求的票证将返回到票证池进行处理。

  4. 使用新的对战数据更新现有游戏会话。 如果回填对战成功,则无需安排新的游戏会话。相反,Amazon GameLift 将更新现有游戏会话的对战数据,并添加新玩家和团队分配。Amazon GameLift 将更新后的游戏会话信息发送到托管现有游戏的服务器进程。

  5. 将新玩家连接到现有游戏会话。 Amazon GameLift 将为新玩家创建玩家会话并使用当前状态、玩家会话和连接信息来更新对战票证。跟踪新玩家票证状态的客户端游戏服务会将连接信息中继到游戏客户端。玩家现在可以加入现有游戏并声明其玩家位置。