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

将 FlexMatch 添加到游戏服务器

本主题介绍如何将 Amazon GameLift FlexMatch 集成到您的游戏服务器中。这是将 FlexMatch 功能添加到您的游戏所需的多个任务之一;有关完整过程,请参阅 FlexMatch 集成指南。有关 FlexMatch 的自定义对战的详细描述,请参阅 Amazon GameLift FlexMatch

本主题中的信息假定您已将 Amazon GameLift 服务器开发工具包成功集成到您的游戏服务器项目中,如添加 Amazon GameLift 到您的游戏服务器中所述。完成此工作后,您便有了所需的大部分机制。本主题中的各个部分介绍了处理使用 FlexMatch 设置的游戏所需的其他工作。

设置您的游戏服务器以进行对战

要设置您的游戏服务器来处理已对战的游戏,请完成以下任务。

  1. 启动使用对战创建的游戏会话。 要请求新的游戏会话,Amazon GameLift 将向您的游戏服务器发送一个 onStartGameSession() 请求,并在其中包含游戏会话对象(请参阅 GameSession)。您的游戏服务器使用游戏会话信息 (包括自定义的游戏数据) 以启动请求的游戏会话。有关更多信息,请参阅启动游戏会话

    对于已对战的游戏,游戏会话对象包含一组对战构建器数据,如本主题后面所述。对战构建器数据包含您的游戏服务器设置新的对战游戏会话所需的信息。这包括对战的团队结构、团队分配和某些玩家属性。例如,您可以使用玩家的平均技能水平解锁特定功能或级别。再举一例,您可以允许玩家选择多个地图首选项,然后只使用一个常见地图选项构建对战。在这种情况下,您将使用玩家属性数据确定游戏会话的正确地图。有关更多信息,请参阅 使用对战构建器数据

  2. 处理玩家连接。 连接到已对战的游戏时,游戏客户端将引用玩家 ID 以及用于验证的玩家会话 ID(请参阅验证新玩家)。您的代码必须使用玩家 ID 将进入的玩家与对战构建器数据中的玩家信息进行关联。对战构建器数据将标识每位玩家的团队分配,并且可能提供在游戏中正确地代表玩家所需的其他信息。例如,玩家属性可能确定玩家在游戏中的游戏角色、位置或状态等。

  3. 在玩家离开游戏时进行报告。 确保您的游戏服务器将调用服务器 API RemovePlayerSession() 来报告已退出的玩家(请参阅报告玩家会话结束)。此步骤在您使用 FlexMatch 回填功能来填充现有游戏中的空位置时尤其重要,并且在客户端游戏服务中启动回填请求时十分关键。有关实施 FlexMatch 回填的更多信息,请参阅利用 FlexMatch 回填现有游戏

  4. 为现有的已对战游戏会话请求新玩家(可选)。 如果您打算使用对战回填功能向现有游戏添加新玩家,则可能需要直接从游戏服务器发送回填请求。有关详细信息 (包括请求选项),请参阅 利用 FlexMatch 回填现有游戏。在 Amazon GameLift FlexMatch 的工作原理 中了解有关对战回填功能的更多信息。

使用对战构建器数据

您的游戏服务器必须能够识别和使用 GameSession 对象中的游戏信息。每当启动或更新游戏会话时,Amazon GameLift 服务就会将这些对象传递到您的游戏服务器。核心游戏会话信息包括游戏会话 ID 和名称、最大玩家数量、连接信息和自定义游戏数据 (如果提供)。

对于使用 FlexMatch 创建的游戏会话,GameSession 对象还包含在对战过程中生成的一组对战构建器数据。除了唯一的对战 ID,它将标识用于创建对战的对战构建器并描述团队、团队分配和玩家。它包括原始对战请求中的玩家属性 (请参阅 Player 对象)。它不包括玩家延迟;如果您需要当前玩家的延迟数据 (如对战回填),建议您获取最新数据。

注意

对战构建器数据指定完整的对战配置 ARN,此 ARN 将标识配置名称、AWS 账户和区域。在请求对战回填时,您需要完整的配置 ARN (在从游戏服务器请求时),或只需配置名称 (在从游戏客户端或客户端服务请求时)。您可以通过解析出以下格式为“:matchmakingconfiguration/”的字符串来从 ARN 值中提取配置名称。在显示的示例中,对战配置名称为“MyMatchmakerConfig”。

以下 JSON 显示一组典型的对战构建器数据。此示例描述了一个两人游戏,该游戏根据技能评级和获得的最高级别匹配玩家。对战构建器还根据角色进行对战,并且确保对战的玩家至少具有一个共同的地图首选项。在此示例方案中,游戏服务器应该能够检测常见地图 (或从多个常见首选项中选择),以确定要为游戏会话分配的地图。

{ "matchId":"1111aaaa-22bb-33cc-44dd-5555eeee66ff", "matchmakingConfigurationArn":"arn:aws-cn:gamelift:us-west-2:111122223333:matchmakingconfiguration/MyMatchmakerConfig", "teams":[ {"name":"attacker", "players":[ {"playerId":"4444dddd-55ee-66ff-77aa-8888bbbb99cc", "attributes":{ "skills":{ "attributeType":"STRING_DOUBLE_MAP", "valueAttribute":{"Body":10.0,"Mind":12.0,"Heart":15.0,"Soul":33.0}} } }] },{ "name":"defender", "players":[{ "playerId":"3333cccc-44dd-55ee-66ff-7777aaaa88bb", "attributes":{ "skills":{ "attributeType":"STRING_DOUBLE_MAP", "valueAttribute":{"Body":11.0,"Mind":12.0,"Heart":11.0,"Soul":40.0}} } }] }] }