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

利用 FlexMatch 回填现有游戏

对战回填使用 FlexMatch 机制来将新玩家与现有对战的游戏会话进行匹配。尽管您可以始终向任何游戏添加玩家 (请参阅 将玩家接入游戏会话),但是对战回填可确保新玩家满足与当前玩家相同的匹配条件。此外,对战回填会将新玩家分配到团队,管理玩家接受,并将更新的对战信息发送到游戏服务器。在对战过程中了解有关对战回填的更多信息。

注意

FlexMatch 回填当前不能使用 实时服务器 用于游戏。

要向您的游戏添加对战回填,请启用自动回填,或通过向您的游戏服务器或游戏客户端添加代码来手动管理回填请求。

打开自动回填

借助自动对战回填,每当游戏会话有空闲的玩家位置时,GameLift 都会自动触发回填请求。要向您的游戏添加自动回填,请对您的游戏进行以下更新。

  1. 启用自动回填。 自动回填在对战配置中管理。启用后,它将用于使用该对战构建器创建的所有匹配的游戏会话。当游戏会话在游戏服务器上启动时,GameLift 便会开始为未满游戏会话生成回填请求。

    要打开自动回填,请打开对战配置并将回填模式设置为“AUTOMATIC”(自动)。有关更多详细信息,请参阅 创建对战配置

  2. 使用新对战构建器数据更新游戏会话。Amazon GameLift 使用服务器开发工具包回调函数 onUpdateGameSession 通过对战信息更新游戏服务器(请参阅 准备服务器进程)。将代码添加到游戏服务器,在回填活动后处理更新的游戏会话对象。在 在游戏服务器上更新对战数据 中了解更多信息。

  3. 关闭游戏会话的自动回填。 您可以选择在单个游戏会话的任一时刻停止自动回填。例如,您可能希望只在游戏实际开始时进行回填,或在游戏的最后几分钟停止回填。

    要停止自动回填,请将代码添加到您的游戏客户端或游戏服务器来发起 GameLift API 调用 StopMatchmaking。此调用需要票证 ID。使用最新回填请求中的回填票证 ID。您可以从游戏会话对战数据中获取此信息,这些数据会按上一步中所述进行更新。

发送回填请求 (从游戏服务器)

您可以直接从托管游戏会话的游戏服务器进程发出对战回填请求。该服务器进程具有有关已连接到游戏的当前玩家及空余玩家位置状态的最新信息。

本主题假定您已构建必需的 FlexMatch 组件并已将对战过程成功地添加到您的游戏服务器和客户端游戏服务。有关设置 FlexMatch 的详细信息,请参阅 FlexMatch 集成路线图

要为您的游戏启用对战回填,请添加以下功能:

  • 将对战回填请求发送到对战构建器并跟踪请求的状态。

  • 更新游戏会话的对战信息。请参阅

与其他服务器功能一样,游戏服务器使用 Amazon GameLift 服务器软件开发工具包。此软件开发工具包在 C++ 和 C# 中可用。有关服务器 API 的一般说明,请参阅服务器 API 参考

要从您的游戏服务器提出对战回填请求,请完成以下任务。

  1. 触发对战回填请求。 通常,每当已对战的游戏具有一个或多个空余玩家位置时,您就会想要发出回填请求。您可能希望将回填请求绑定到特定情况,例如填充关键人物角色或平衡团队。您还有可能想要基于游戏会话的时长限制回填活动。

  2. 创建回填请求。 添加代码以创建对战回填请求并将其发送到 FlexMatch 对战构建器。回填请求是使用以下服务器 API 处理的:

    要创建回填请求,请使用以下信息调用 StartMatchBackfill。要取消回填请求,请使用回填请求的票证 ID 调用 StopMatchBackfill

    • 票证 ID - 提供对战票证 ID(或者选择自动生成该 ID)。您可以使用相同的机制来将票证 ID 分配到对战请求和回填请求。以相同方式处理对战和回填的票证。

    • 对战构建器 - 确定要用于回填请求的对战构建器。通常,您想要使用与用于创建原始对战的对战构建器相同的构建器。此请求需要对战配置 ARN。此信息存储在游戏会话对象 (GameSession) 中,该对象在激活游戏会话时由 Amazon GameLift 提供给服务器进程。对战配置 ARN 包含在 MatchmakerData 属性中。

    • 游戏会话 ARN - 确定要回填的游戏会话。您可以通过调用服务器 API GetGameSessionId() 来获取游戏会话 ARN。对战过程期间,新请求的票证不具有游戏会话 ID,而回填请求的票证则具有。提供游戏会话 ID 是用于区分新对战票证和回填票证的一种方式。

    • 玩家数据 - 包含您正在回填的游戏会话中所有当前玩家的玩家信息 (Player)。此信息让对战构建器能够为当前游戏会话中的玩家找到可能的最佳玩家匹配。如果您的游戏服务器已准确报告玩家连接状态,则您应能够获取此数据,如下所示:

      1. 托管游戏会话的服务器进程应具有玩家当前已连接到游戏会话的最新信息。

      2. 要获取玩家 ID、属性和团队任务,请从游戏会话对象 (GameSession)、MatchmakerData 属性中提取玩家数据 (请参阅使用对战构建器数据)。对战构建器数据包含已与游戏会话匹配的所有玩家,因此您将需要提取仅当前连接的玩家的玩家数据。

      3. 对于玩家延迟,如果对战构建器调用延迟数据,则从所有当前玩家中收集新的延迟值并将其包含在每个 Player 对象中。如果忽略延迟数据而且对战构建器具有延迟规则,则该请求将不会匹配成功。回填请求仅需要游戏会话当前所在的区域的延迟数据。您可以从 GameSession 对象的 GameSessionId 属性中获取游戏会话的区域;此值是一个 ARN,其中包含了区域。

  3. 跟踪回填请求的状态。Amazon GameLift 使用服务器开发工具包回调函数 onUpdateGameSession 针对回填请求的状态更新您的游戏服务器(请参阅准备服务器进程)。添加代码以处理状态消息(以及作为回填请求成功结果的更新的游戏会话对象)在在游戏服务器上更新对战数据中。

    对战构建器在一个游戏会话中一次只能处理一个对战回填请求。如果您需要取消请求,请调用 StopMatchBackfill()。如果您需要更改请求,请调用 StopMatchBackfill,然后提交更新的请求。

发送回填请求 (从客户端服务)

作为从游戏服务器发送回填请求的替代方案,您可能希望从客户端游戏服务发送这些请求。要使用此选项,客户端服务必须有权访问有关游戏会话活动和玩家连接的最新数据;如果您的游戏使用会话目录服务,这可能是很好的选择。

本主题假定您已构建必需的 FlexMatch 组件并已将对战过程成功地添加到您的游戏服务器和客户端游戏服务。有关设置 FlexMatch 的详细信息,请参阅 FlexMatch 集成路线图

要为您的游戏启用对战回填,请添加以下功能:

  • 将对战回填请求发送到对战构建器并跟踪请求的状态。

  • 更新游戏会话的对战信息。请参阅

与其他客户端功能一样,客户端游戏服务将结合使用 AWS 软件开发工具包与 Amazon GameLift API。C++、C# 和许多其他语言都提供此软件开发工具包。有关客户端 API 的常规说明,请参阅 Amazon GameLift 服务 API 参考,其中介绍了 Amazon GameLift 相关操作的低级别服务 API,并提供特定于语言的参考指南链接。

要设置客户端游戏服务以回填对战的游戏,请完成以下任务。

  1. 触发回填请求。 通常,每当已对战的游戏具有一个或多个空余玩家位置时游戏都会启动回填请求。您可能希望将回填请求绑定到特定情况,例如填充关键人物角色或平衡团队。您还有可能想要基于游戏会话的时长限制回填。无论您对触发器使用什么,至少您将需要以下信息。您可以通过使用游戏会话 ID 调用 DescribeGameSessions 来从游戏会话对象 (GameSession) 中获取此信息。

    • 当前空余玩家位置的数量。此值可通过游戏会话的最大玩家限制和当前玩家数量计算得出。当前玩家数量会在您的游戏服务器每次连接 Amazon GameLift 服务时进行更新以验证新的玩家连接或报告断开连接的玩家。

    • 创建策略。此设置指示游戏会话当前是否接受新玩家。

    游戏会话对象包含其他可能有用的信息,包括游戏会话开始时间、自定义游戏属性和对战构建器数据。

  2. 创建回填请求。 添加代码以创建对战回填请求并将其发送到 FlexMatch 对战构建器。使用这些客户端 API 处理回填请求:

    要创建回填请求,请使用以下信息调用 StartMatchBackfill。回填请求类似于对战请求 (请参阅请求玩家对战),但还识别现有游戏会话。要取消回填请求,请使用回填请求的票证 ID 调用 StopMatchmaking

    • 票证 ID - 提供对战票证 ID(或者选择自动生成该 ID)。您可以使用相同的机制来将票证 ID 分配到对战请求和回填请求。以相同方式处理对战和回填的票证。

    • 对战构建器 - 标识要使用的对战配置的名称。通常,您想要使用与用于创建原始对战的回填的对战构建器相同的构建器。此信息位于对战配置 ARN 下的游戏会话对象 (GameSession), MatchmakerData 属性中。名称值是紧接在“matchmakingconfiguration/”之后的字符串。(例如,在 ARN 值“arn:aws-cn:gamelift:us-west-2:111122223333:matchmakingconfiguration/MM-4v4”中,对战配置名称为“MM-4v4”。)

    • 游戏会话 ARN - 指定要回填的游戏会话。使用游戏会话对象中的 GameSessionId 属性;此 ID 使用您所需的 ARN 值。回填请求的对战票证 (MatchmakingTicket) 在进行处理时具有游戏会话 ID;在放置对战之前,新对战请求的票证不会获取游戏会话 ID;提供游戏会话 ID 是用于区分新对战票证和回填票证的一种方式。

    • 玩家数据 - 包含您正在回填的游戏会话中所有当前玩家的玩家信息 (Player)。此信息让对战构建器能够为当前游戏会话中的玩家找到可能的最佳玩家匹配。如果您的游戏服务器已准确报告玩家连接状态,则您应能够获取此数据,如下所示:

      1. 使用游戏会话 ID 调用 DescribePlayerSessions() 来发现当前已连接到游戏会话的所有玩家。每个玩家会话包括一个玩家 ID。您可以添加状态筛选器以仅检索活动的玩家会话。

      2. 从游戏会话对象 (GameSession)、MatchmakerData 属性中提取玩家数据 (请参阅使用对战构建器数据)。使用在上一步中获取的玩家 ID 来仅获取当前已连接玩家的数据。由于玩家退出时不会更新对战构建器数据,因此您仅需要提取当前玩家的数据。

      3. 对于玩家延迟,如果对战构建器调用延迟数据,请从所有当前玩家中收集新的延迟值并将其包含在 Player 对象中。如果忽略延迟数据而且对战构建器具有延迟规则,则该请求将不会匹配成功。回填请求仅需要游戏会话当前所在的区域的延迟数据。您可以从 GameSession 对象的 GameSessionId 属性中获取游戏会话的区域;此值是一个 ARN,其中包含了区域。

  3. 跟踪回填请求的状态。 添加代码以侦听对战票证状态更新。您可以使用设置的机制利用事件通知 (首选) 或轮询跟踪新对战请求的票证 (请参阅跟踪对战请求状态)。尽管您无需使用回填请求触发玩家接受活动,而且玩家信息已在游戏服务器上更新,但仍需要监控票证状态以处理请求失败和重新提交。

    对战构建器在一个游戏会话中一次只能处理一个对战回填请求。如果您需要取消请求,请调用 StopMatchmaking。如果您需要更改请求,请调用 StopMatchmaking,然后提交更新的请求。

    在对战回填请求成功后,您的游戏服务器会收到更新的 GameSession 对象并处理将新玩家加入游戏会话中所需的任务。请在在游戏服务器上更新对战数据上查看更多信息。

在游戏服务器上更新对战数据

无论在您的游戏中如何启动对战回填请求,您的游戏服务器都必须能够处理由于对战回填请求而导致 Amazon GameLift 提供的游戏会话更新。

当 Amazon GameLift 完成对战回填请求时(无论成功与否),它都会使用回调函数 onUpdateGameSession 调用您的游戏服务器。此调用具有三个输入参数:对战回填票证 ID、状态消息和包含最新对战数据 (包括玩家信息) 的 GameSession 对象。您需要将以下代码添加到游戏服务器以作为您的游戏服务器集成的一部分:

  1. 实现 onUpdateGameSession 函数。此函数必须能够处理以下状态消息 (updateReason):

    • MATCHMAKING_DATA_UPDATED – 新玩家已与游戏会话成功匹配。GameSession 对象包含更新的对战构建器数据,包括有关现有玩家和新匹配的玩家的玩家数据。

    • BACKFILL_FAILED – 对战回填尝试由于内部错误而失败。GameSession 对象保持不变。

    • BACKFILL_TIMED_OUT – 对战构建器未能在时间限制内找到回填对战。GameSession 对象保持不变。

    • BACKFILL_CANCELLED – 对战回填请求已通过调用 StopMatchmaking(客户端)或 StopMatchBackfill(服务器)而被取消。GameSession 对象保持不变。

  2. 对于成功的回填对战,请使用更新的对战构建器数据来在新玩家连接到游戏会话时进行处理。至少,您将需要使用新玩家的团队任务以及要让玩家在游戏中开始所需的其他玩家属性。

  3. 在您的游戏服务器对服务器软件开发工具包操作 ProcessReady() 的调用中,添加 onUpdateGameSession 回调方法名称作为过程参数。