本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将 Amazon GameLift 添加到您的游戏客户端
将 Amazon GameLift 集成到需要游戏会话信息的游戏组件中,创建新的游戏会话以及向游戏中添加玩家。根据游戏架构,此功能可能会放在后端服务中,处理诸如玩家身份验证、对战或游戏会话放置等任务。
注意
有关如何为亚马逊 GameLift 托管的游戏设置配对的详细信息,请参阅《亚马逊 GameLift FlexMatch开发者指南》。
在后端服务 GameLift 上设置 Amazon
添加用于初始化 Amazon GameLift 客户端和存储密钥设置的代码。此代码必须在任何依赖于 Amazon 的代码之前运行 GameLift。
-
设置客户端配置。使用默认客户端配置或创建自定义客户端配置对象。有关更多信息,请参阅 AWS::Client::ClientConfiguration
(C++) 或 AmazonGameLiftConfig(C#)。 客户端配置指定联系亚马逊时要使用的目标区域和终端节点 GameLift。区域确定要使用的已部署资源集(实例集、队列和对战)。默认客户端配置设置位置为美国东部(弗吉尼亚州北部)区域。要使用任何其他区域,请创建自定义配置。
-
初始化亚马逊 GameLift 客户端。将 Aws:GameLift:: GameLiftClient ()
(C++) 或 AmazonGameLiftClient() (C#) 与默认客户端配置或自定义客户端配置一起使用。 -
添加为每个玩家生成一个唯一标识符的机制。有关更多信息,请参阅生成玩家 ID。
-
收集并存储以下信息:
-
目标队列 — 许多 Amazon GameLift API 请求都必须指定队列。要指定目标实例集,请使用实例集 ID 或者指向目标实例集的别名 ID。最佳做法是使用实例集别名,这样您就可以在不更新后端服务的情况下将玩家从一个实例集切换到另一个实例集。
-
目标队列 – 对于使用多实例集队列放置新游戏会话的游戏,请指定要使用的队列名称。
-
AWS 凭证 — 所有向 Amazon 拨打的电话都 GameLift 必须提供托管游戏的凭证。 AWS 账户 您可以通过创建玩家用户来获取这些凭证,如为游戏设置编程式访问权限中所述。根据您管理玩家用户访问权限的方式,请执行以下操作:
-
如果您使用角色来管理玩家用户权限,请在调用 Amazon GameLift API 之前添加代入该角色的代码。承担角色的请求返回一组临时安全凭证。有关更多信息,请参阅 IAM 用户指南中的切换到 IAM 角色 (AWS API)。
-
如果您拥有长期安全凭证,请配置您的代码以查找和使用存储的凭证。请参阅《工具参考指南》AWS SDKs 和《工具参考指南》中的使用长期凭证进行身份验证。有关存储凭据的信息,请参阅 (C++) 和 (.NET)
的AWS API 参考。 -
如果您有临时安全证书,请使用 AWS Security Token Service (AWS STS) 添加代码以定期刷新证书,如 IAM 用户指南 AWS SDKs中的使用临时安全证书中所述。该代码必须在旧凭证过期之前请求新的凭证。
-
-
获取游戏会话
添加用于发现可用游戏会话和管理游戏会话设置和元数据的代码。
搜索活动的游戏会话。
SearchGameSessions用于获取有关特定游戏会话、所有活动会话或符合一组搜索条件的会话的信息。此调用会为每个活动游戏会话返回一个与您的搜索请求相匹配的GameSession对象。
使用搜索条件获取经筛选列表,列出可供玩家接入的活动游戏会话。例如,您可以按照以下方式筛选会话:
-
排除已饱和的游戏会话:
CurrentPlayerSessionCount = MaximumPlayerSessionCount
-
根据会话运行的时长来选择游戏会话:评估
CreationTime
-
根据自定义游戏属性查找游戏会话:
gameSessionProperties.gameMode = "brawl"
管理游戏会话。
使用以下任意一项操作来检索或更新游戏会话信息。
-
DescribeGameSessionDetails() — 获取游戏会话的保护状态以及游戏会话信息。
-
UpdateGameSession() — 根据需要更改游戏会话的元数据和设置。
-
GetGameSessionLogUrl— 访问存储的游戏会话日志。
创建游戏会话
添加用于在已部署的实例集中启动新游戏会话并使其可供玩家接入的代码。创建游戏会话有两个选项,具体取决于你是在多个区域还 AWS 区域 是在单个区域部署游戏。
在多位置队列中创建游戏会话
StartGameSessionPlacement用于在队列中请求新游戏会话。要使用此操作,请创建一个队列。这决定了 Amazon 将新游戏会话 GameLift 放置在哪里。有关队列及其使用方法的更多信息,请参阅 使用 Amazon GameLift 队列管理游戏会话放置。
创建游戏会话放置时,指定要使用的队列名称、游戏会话名称、最大并发玩家数量以及一组可选的游戏属性。您可以选择提供玩家列表来自动加入游戏会话。如果您包含相关区域的玩家延迟数据,则 Amazon 会 GameLift 使用这些信息将新的游戏会话放置在为玩家提供理想游戏体验的舰队上。
游戏会话放置为异步操作。在放置请求后,您等待其成功或超时。您也可以随时使用取消请求StopGameSessionPlacement。要查看您的安置申请的状态,请致电DescribeGameSessionPlacement。
在特定的实例集中创建游戏会话。
CreateGameSession用于在指定队列上创建新会话。这一同步操作成功与否取决于该实例集是否拥有托管新游戏会话所需的资源。在 Amazon GameLift 创建新游戏会话并返回GameSession对象后,您可以加入玩家的行列。
使用此操作时,请提供实例集 ID 或别名 ID、会话名称和游戏中的最大并发玩家数量。您可以选择包括一组游戏属性。游戏属性是在键值对的数组中定义的。
如果您使用 Amazon GameLift 资源保护功能来限制一个玩家可以创建的游戏会话数量,请提供游戏会话创建者的玩家 ID。
将玩家接入游戏会话
添加在活动的游戏会话中预留玩家位置以及将游戏客户端连接到游戏会话的代码。
-
在游戏会话中预留玩家位置。
要预留玩家位置,请在游戏会话中新建一个玩家会话。有关玩家会话的更多信息,请参阅如何将玩家接入游戏。
您可通过两种方式来创建新的玩家会话:
-
用于StartGameSessionPlacement在新游戏会话中为一名或多名玩家预留空位。
-
使用或使用游戏会话 ID 为一名CreatePlayerSession或CreatePlayerSessions多名玩家保留玩家位置。
Amazon GameLift 首先验证游戏会话是否接受新玩家,并且有可用的玩家位置。如果成功,Amazon 将为玩家 GameLift 保留一个位置,创建新的玩家会话并返回一个PlayerSession对象。此对象包含游戏客户端连接到游戏会话所需的 DNS 名称、IP 地址和端口。
玩家会话请求必须包括每个玩家的唯一 ID。有关更多信息,请参阅生成玩家 ID。
玩家会话可能包括一组自定义玩家数据。这些数据存储在新创建的玩家会话对象中,您可以通过调用 DescribePlayerSessions() 来检索该对象。当玩家直接连接到游戏会话时,Amazon GameLift 也会将此对象传递给游戏服务器。在请求多人游戏会话时,您可以提供每个玩家的玩家数据字符串,在请求中映射到玩家 ID。
-
-
连接游戏会话
将代码添加到游戏客户端来检索包含游戏会话的连接信息的
PlayerSession
对象。使用此信息与服务器建立直接连接。-
您可以使用指定的端口以及分配给服务器进程的 DNS 名称或 IP 地址进行连接。
-
如果实例集启用了 TLS 证书生成,则必须使用 DNS 名称和端口进行连接。
-
如果您的游戏服务器验证了传入的玩家连接,请引用玩家会话 ID。
建立连接后,游戏客户端和服务器进程直接通信,无需Amazon参与 GameLift。服务器与 Amazon 保持通信, GameLift以报告玩家连接状态、健康状态等。如果游戏服务器验证了传入的玩家,则它会验证玩家会话 ID 是否与游戏会话中的预留位置相匹配,并接受或拒绝玩家连接。当玩家断开连接时,服务器进程报告断开连接。
-
使用游戏会话属性
游戏客户端可以使用游戏属性将数据传入游戏会话。游戏属性是游戏服务器可以添加、读取、列出和更改的键值对。您可以在创建新游戏会话时传入游戏属性,也可以稍后在游戏会话激活时这样做。一个游戏会话最多可包含 16 个游戏属性。您无法删除游戏属性。
例如,您的游戏提供了以下难度等级:Novice
、Easy
、Intermediate
和 Expert
。一位玩家选择了 Easy
,然后开始游戏。您的游戏客户端使用StartGameSessionPlacement
或向亚马逊 GameLift 请求新的游戏会话,CreateGameSession
如前面部分所述。在请求中,客户端将传递以下数据:{"Key": "Difficulty", "Value":"Easy"}
。
作为对请求的响应,Amazon GameLift 创建了一个包含指定游戏属性的GameSession
对象。 GameLift 然后,Amazon 会指示可用的游戏服务器启动新的游戏会话并传递GameSession
对象。游戏服务器会启动一个 Difficulty
为 Easy
的游戏会话。