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

将 FlexMatch 添加到游戏服务器

本主题介绍如何为您的游戏服务器添加 FlexMatch 对战支持。要了解有关如何向游戏添加 FlexMatch 的更多信息,请参阅以下主题:

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

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

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

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

    对于已匹配的游戏,游戏会话对象还包含一组对战构建器数据。对战构建器数据包含您的游戏服务器启动新的对战游戏会话所需的信息。这包括对战的团队结构、团队分配以及可能与您的游戏相关的某些玩家属性。例如,您的游戏可以根据平均玩家技能级别解锁某些功能,或根据玩家的首选项选择地图。在 使用对战构建器数据 中了解更多信息。

  2. 处理玩家连接。 当连接到已经匹配的游戏时,游戏客户端将引用玩家 ID 和玩家会话 ID(请参阅 验证新玩家)。您的游戏服务器使用玩家 ID 将传入玩家与对战构建器数据中的玩家信息进行关联。对战构建器数据将标识玩家的团队分配,并且可能提供在游戏中正确地代表玩家的其他信息。

  3. 在玩家离开游戏时进行报告。 确保您的游戏服务器将调用服务器 API RemovePlayerSession() 来报告已退出的玩家(请参阅 报告玩家会话结束)。如果您使用 FlexMatch 回填填充现有游戏中的空位置,此步骤非常重要。如果您的游戏通过客户端游戏服务发起回填请求,此步骤非常重要。在 利用 FlexMatch 回填现有游戏 中了解有关实施 FlexMatch 回填的更多信息。

  4. 为现有的已对战游戏会话请求新玩家(可选)。 确定您想要如何回填现有的匹配游戏。如果您的对战构建器将回填模式设置为“手动”,您可能需要为您的游戏添加回填支持。如果回填模式设置为“自动”,您可能需要一种为单个游戏会话关闭此模式的方法。例如,您可能想要在到达游戏中的某个点后停止回填游戏会话。在 利用 FlexMatch 回填现有游戏 中了解有关管理对战回填的更多信息。

使用对战构建器数据

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

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

注意

对战构建器数据指定完整的对战配置 ARN,此 ARN 将标识配置名称、AWS 账户和区域。在从游戏客户端或服务请求对战回填时,仅需要配置名称。您可以通过解析出“:matchmakingconfiguration/”后面的字符串来提取配置名称。在显示的示例中,对战配置名称为“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}} } }] }] }