将亚马逊GameLift添加到您的游戏客户端 - 亚马逊 GameLift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将亚马逊GameLift添加到您的游戏客户端

将亚马逊GameLift集成到需要游戏会话信息的游戏组件中,创建新的游戏会话并将玩家添加到游戏中。根据您的游戏架构,此功能位于处理玩家身份验证、配对或游戏会话放置等任务的后端服务中。

注意

有关如何为您的亚马逊GameLift托管游戏设置配对的详细信息,请参阅亚马逊GameLiftFlexMatch开发者指南

在后端服务GameLift上设置亚马逊

添加代码以初始化亚马逊GameLift客户端和存储密钥设置。此代码必须在任何依赖亚马逊的代码之前运行GameLift。

  1. 设置客户机配置。使用默认的客户机配置或创建自定义的客户机配置对象。有关更多信息,请参见 AWS::Client::ClientConfiguration(C++) 或 AmazonGameLiftConfig(C#)。

    客户端配置指定了联系亚马逊时要使用的目标区域和终端节点GameLift。区域确定要使用的一组已部署资源(舰队、队列和媒人)。默认的客户端配置将位置设置为美国东部(弗吉尼亚北部)区域。要使用任何其他区域,请创建自定义配置。

  2. 初始化亚马逊GameLift客户端。将 Aws:GameLift::: GameLiftClient () (C++) 或 AmazonGameLiftClient() (C#) 与默认客户端配置或自定义客户端配置一起使用。

  3. 添加一种为每个玩家生成唯一标识符的机制。有关更多信息,请参阅生成玩家 ID

  4. 收集和存储以下信息:

    • 目标队列-许多 Amazon GameLift API 请求必须指定队列。为此,请使用队列 ID 或指向目标队列的别名 ID。最佳做法是使用舰队别名,这样你就可以在不更新后端服务的情况下将玩家从一个舰队切换到另一个舰队。

    • 目标队列 — 对于使用多舰队队列放置新游戏会话的游戏,请指定要使用的队列的名称。

    • Amazon证书 — 对亚马逊的所有调用都GameLift必须提供游戏托管者的证书。Amazon Web Services 账户您可以通过创建玩家用户来获取这些证书,如中所述为您的游戏设置编程访问权限。根据您管理玩家用户访问权限的方式,执行以下操作:

获取游戏会话

添加代码以发现可用的游戏会话并管理游戏会话设置和元数据。

搜索活跃的游戏会话

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

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

  • 排除已满的游戏会话:CurrentPlayerSessionCount = MaximumPlayerSessionCount.

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

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

管理游戏会话

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

创建游戏会话

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

在多位置队列中创建游戏会话

用于在队列中请求新的游戏会话。StartGameSessionPlacement要使用此操作,请创建队列。这决定了亚马逊将新游戏会话GameLift放置在哪里。有关队列及其使用方法的更多信息,请参阅为游戏会话放置设置亚马逊GameLift队列

创建游戏会话位置时,请指定要使用的队列的名称、游戏会话名称、最大并发玩家数以及一组可选的游戏属性。您也可以选择提供玩家列表以自动加入游戏会话。如果您包括相关地区的玩家延迟数据,则亚马逊会GameLift使用此信息将新游戏会话放到为玩家提供理想游戏体验的队列上。

游戏会话放置为异步操作。在你提交请求后,你可以让它成功或超时。您也可以随时使用取消请求StopGameSessionPlacement。要查看您的安置申请的状态,请致电DescribeGameSessionPlacement

在特定舰队上创建游戏会话

CreateGameSession用于在指定队列上创建新会话。这一同步操作成功与否取决于该队组是否拥有托管新游戏会话所需的资源。在亚马逊GameLift创建新游戏会话并返回GameSession对象后,您可以加入玩家加入该会话。

使用此操作时,请提供队列 ID 或别名 ID、会话名称以及游戏的最大并发玩家人数。您可以选择包括一组游戏属性。游戏属性是在键值对数组中定义的。

如果您使用亚马逊GameLift资源保护功能限制一个玩家可以创建的游戏会话数量,请提供游戏会话创建者的玩家 ID。

加入玩家的游戏会话

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

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

    要预留玩家位置,请在游戏会话中新建一个玩家会话。有关玩家会话的更多信息,请参阅玩家如何连接游戏

    创建新玩家会话的方法有两种:

    亚马逊GameLift首先验证游戏会话是否接受新玩家,并且有可用的玩家插槽。如果成功,亚马逊会为玩家GameLift保留一个时段,创建新的玩家会话并返回一个PlayerSession对象。此对象包含游戏客户端连接到游戏会话所需的 DNS 名称、IP 地址和端口。

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

    玩家会话可以包含一组自定义玩家数据。这些数据存储在新创建的玩家会话对象中,你可以通过调用 DescribePlayerSessions() 来检索该对象。当玩家直接连接到游戏会话时,亚马逊GameLift也会将此对象传递给游戏服务器。请求多个玩家会话时,为每个玩家提供一串玩家数据,这些数据映射到请求中的玩家 ID。

  2. 连接到游戏会话

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

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

    • 如果您的游戏服务器验证了传入的玩家连接,则引用玩家会话 ID。

    建立连接后,游戏客户端和服务器进程直接通信,无需亚马逊参与GameLift。服务器与亚马逊保持通信GameLift,以报告玩家的连接状态、健康状态等。如果游戏服务器验证了传入的玩家,则它会验证玩家会话 ID 是否与游戏会话中的预留插槽相匹配,并接受或拒绝玩家连接。当玩家断开连接时,服务器进程会报告连接中断。