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

将 Amazon GameLift 添加到游戏客户端

您可以将 Amazon GameLift 集成到需要获取游戏会话信息、创建新游戏会话和/或将玩家接入游戏的游戏组件。根据游戏架构,此功能可能会放在游戏客户端中,或放在处理诸如玩家身份验证、对战或游戏放置等任务的游戏服务中。

要执行此操作,请将 AWS SDK与 Amazon GameLift API 结合使用。C++、C# 和许多其他语言都提供此软件开发工具包。有关 AWS SDK 的详细信息、版本信息和语言支持,请参阅 对于客户端服务。此主题中的大部分链接跳转到 Amazon GameLift 服务 API 参考,其中介绍了 Amazon GameLift 相关操作的低级别服务 API,并包含特定于语言的参考指南链接。

注意

希望使用对战将玩家吸引到游戏中? 当您在游戏客户端或服务上设置了 Amazon GameLift 之后,添加 FlexMatch 以匹配玩家和创建自定义游戏会话。请在添加 FlexMatch 对战上查看更多信息。

在客户端或服务中设置 Amazon GameLift

您可添加代码来初始化 Amazon GameLift 客户端,并存储一些配合 Amazon GameLift 使用的关键设置。此代码需要位于与 Amazon GameLift 相关的任何代码之前,以便提前运行,例如在启动时运行。

注意

要设置游戏客户端以使用 Amazon GameLift Local 进行测试,请参阅测试集成

  1. 决定是使用默认的客户端配置还是创建自定义设置。对于自定义设置,您必须创建自定义 ClientConfiguration 对象。请参阅 AWS ClientConfiguration (C++) 了解对象结构和默认设置。

    客户端配置指定目标区域和终端节点。区域确定响起请求时 Amazon GameLift 要与之交互的资源(队组、队列、对战构建器等)。默认客户端配置指定美国东部(弗吉尼亚北部)区域。要使用任何其他区域,请创建自定义配置。对于名称和终端节点,请参阅 Amazon GameLift 支持的 AWS 区域的列表。如果您的客户端或服务需要对多个区域发出请求,请根据需要为每个目标区域创建单独的客户端配置对象。有关特定于语言的示例,请参阅使用区域和 AWS 开发工具包

  2. 初始化 Amazon GameLift 客户端。使用客户端配置的默认设置或自定义配置来调用 Aws::GameLift::GameLiftClient() (C++)。

  3. 添加为每个玩家生成一个唯一标识符的机制。Amazon GameLift 需要唯一的玩家 ID 才能连接到游戏会话。有关更多信息,请参阅生成玩家 ID

  4. 收集并存储以下信息,以便在联系 Amazon GameLift 时使用:

    • 目标队组 – 大多数 Amazon GameLift API 请求必须指定队组,如获取有关可用游戏会话的信息或管理游戏会话和玩家会话。定义最佳目标队组的方式 (例如,设置静态队组或者根据设备的物理位置选择队组)。要指定目标队组,请使用队组 ID 或者指向目标队组的别名 ID。队组别名非常有用,通过该别名,您可以在不更新游戏客户端的情况下,将玩家从一个队组切换到另一个。目标队组和区域的组合 (在客户端配置中指定) 可唯一标识队组。

    • 目标队列 – 如果游戏使用多队组队列放置新的游戏会话,则您可以指定要使用的队列。要指定目标队列,请使用队列名称。队列必须在区域中进行配置

    • AWS 凭证 – 调用 Amazon GameLift 服务时必须提供托管该游戏的 AWS 账户的凭证。这是您用于设置 Amazon GameLift 队组的账户,您应先通过权限策略为玩家创建 IAM 用户或用户组。您需要创建一个 Aws::Auth::AWSCredentials (C++) 对象,其中包含玩家用户组的 IAM 访问密钥和私有密钥。有关查找密钥的帮助,请参阅管理 IAM 用户的访问密钥

获取游戏会话

添加用于发现可用游戏会话和管理游戏会话设置和元数据的代码。请参阅 游戏和玩家会话功能 了解有关游戏会话功能的更多信息。

搜索活动的游戏会话。

使用 SearchGameSessions 获取有关特定游戏会话、所有活动的会话或满足一组搜索条件的会话的信息。此调用为每个符合搜索请求的活动游戏会话返回一个 GameSession 对象。

使用搜索条件获取经筛选列表,列出可供玩家接入的活动游戏会话。例如,您可以按照以下方式筛选会话:

  • 排除不接受新玩家的游戏会话:PlayerSessionCreationPolicy = DENY_ALL

  • 排除已饱和的游戏会话:CurrentPlayerSessionCount = MaximumPlayerSessionCount

  • 根据会话运行的时长来选择游戏会话:评估 CreationTime

  • 根据自定义游戏属性查找游戏会话:gameSessionProperties.gameMode = "brawl"

管理游戏会话。

使用以下任意一项操作来检索或更新游戏会话信息。

创建游戏会话

添加用于在已部署的队组中启动新游戏会话并使其可供玩家接入的代码。创建游戏会话有两种选择,具体取决于您在多个区域还是单个区域中部署游戏。

使用多区域队列创建游戏会话。

使用 StartGameSessionPlacement 在队列中提交新游戏会话请求。要使用此功能,您需要设置一个队列,该队列确定可在哪里 (哪个队组上) 放置新游戏会话。队列依次尝试每个可能的队组,直至找到一个具有托管新游戏会话的可用资源的队组为止,以此来处理游戏会话放置请求。有关队列及其使用方法的更多信息,请参阅设计游戏会话队列

创建游戏会话放置时,指定要使用的队列名称、游戏会话名称、游戏的最大并发玩家数量以及一组可选的游戏属性。您可以选择提供玩家列表来自动加入游戏会话。如果您为相关区域包括玩家延迟数据,Amazon GameLift 会使用此信息将新游戏会话放置到能够为玩家提供尽可能最佳玩游戏体验的队组上。

游戏会话放置为异步操作。在放置请求后,您等待其成功或超时。您也可以随时使用 StopGameSessionPlacement 取消请求。要检查您的放置请求的状态,请调用 DescribeGameSessionPlacement 来检索已更新的 GameSessionPlacement 对象。创建了新的游戏会话之后,GameSessionPlacement 反映以下更改:(1) 状态从“Pending”更改为“Fulfilled”;(2) 添加了新游戏会话信息,包括游戏会话 ID 和区域;以及 (3) 添加了新玩家会话信息 (如果请求)。

在特定的队组中创建游戏会话。

使用 CreateGameSession 可在特定队组中创建新会话。这一同步操作成功与否取决于该队组是否拥有托管新游戏会话所需的资源。您的游戏应以最适合游戏和玩家的方式来处理故障。例如,您可以重复该请求,直到资源被释放或扩充,您也可以切换到不同的队组。在 Amazon GameLift 创建新游戏会话并返回 GameSession 对象后,您就可以开始将玩家接入该会话了。

使用此方法创建游戏会话时,请指定队组 ID 或别名 ID、会话名称和游戏中的最大并发玩家数量。您可以选择包括一组游戏属性。游戏属性在一组键–值对中定义,您可以在其中定义对您的游戏有意义的键和一组值。此信息将传递给托管新游戏会话的服务器进程,在游戏服务器中用作预设值。例如,您可以使用游戏属性指引游戏会话使用某个游戏地图或一组特定的规则。

如果您使用 Amazon GameLift 的资源保护功能来限制一个玩家可创建的游戏会话数量,您将需要指定游戏会话创建者的玩家 ID。

将玩家接入游戏会话

添加在活动的游戏会话中预留玩家位置以及将游戏客户端连接到游戏会话的代码。

  1. 在游戏会话中预留玩家位置。

    要预留玩家位置,请在游戏会话中新建一个玩家会话。请参阅 如何将玩家接入游戏 了解有关玩家会话的更多信息。您可通过两种方式来创建新的玩家会话:

    • 如果您使用 StartGameSessionPlacement 创建游戏会话,如前一部分所述,您可以为一个或多个玩家在新游戏会话中预留位置。

    • 通过游戏会话 ID 使用 CreatePlayerSessionCreatePlayerSessions 为一个或多个玩家预留游戏位置。

    使用这两种方法,Amazon GameLift 均会首先验证该游戏会话是否接受新玩家,以及游戏会话中是否有可用的玩家位置。如果成功,Amazon GameLift 将为玩家预留位置、创建新的玩家会话并返回一个 PlayerSession 对象,其中包含 DNS 名称、IP 地址和端口,游戏客户端需要使用这些信息才能连接到游戏会话。

    玩家会话请求必须包括每个玩家的唯一 ID。请参阅 生成玩家 ID 了解有关玩家 ID 的更多信息。

    玩家会话请求可以选择包括一组自定义玩家数据。此数据存储在新创建的玩家会话对象中,调用 DescribePlayerSessions() 可检索该对象。当玩家直接连接到游戏会话时,该对象还将从 Amazon GameLift 服务传递到游戏服务器。Amazon GameLift 不使用玩家数据,该数据是一个供游戏组件解读的简单字符串。在请求多人游戏会话时,您可以提供每个玩家的玩家数据字符串,在请求中映射到玩家 ID。

  2. 连接 游戏会话。

    将代码添加到游戏客户端来检索包含游戏会话的连接信息的 PlayerSession 对象。使用此信息与服务器进程建立直接连接。

    • 您可以使用指定的端口以及分配给服务器进程的 DNS 名称或 IP 地址进行连接。

    • 如果您使用玩家会话 ID 以保留玩家插槽并跟踪玩家连接,则必须引用玩家会话 ID。

    建立连接后,游戏客户端和服务器进程可直接通信,而不必使用 GameLift 服务来沟通游戏过程。服务器进程与 GameLift 服务保持通信,以报告玩家连接状态、运行状况等。在初始连接时,它可能会与服务联系,以验证玩家的会话 ID 有效并处于预留状态。如果通过验证,则获取预留位置并接受玩家连接。稍后,当玩家断开连接时,服务器进程报告断开连接。