本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Unity 插件:将游戏部署到托管 EC2舰队
在此工作流程中,您将使用插件为托管在 Amazon 管理的基于云的计算资源上进行游戏准备 GameLift。您可以为亚马逊 GameLift 功能添加客户端和服务器游戏代码,然后将您的服务器版本上传到亚马逊 GameLift 服务进行托管。此工作流程完成后,您将拥有在云中运行的游戏服务器,以及可以连接到该服务器且正常运行的游戏客户端。
要启动亚马逊 GameLift 托管亚马逊 EC2 工作流程,请执行以下操作:
在 Unity 编辑器主菜单中,选择 Amazon, GameLift然后选择托管主机 EC2。此工作流程提供了集成、构建、部署和启动游戏组件的六步流程。
设置配置文件
选择您在遵循此工作流程时要使用的配置文件。您选择的配置文件会影响工作流程中的所有步骤。您创建的所有资源都与个人资料的 AWS 账户相关联,并放置在个人资料的默认 AWS 区域中。个人资料用户的权限决定了您对 AWS 资源和操作的访问权限。
-
从可用配置文件的下拉列表中选择一个配置文件。如果您还没有个人资料或想要创建新的个人资料,请前往 Amazon GameLift 菜单并选择 “设置 AWS 账户资料”。
-
如果引导状态不是“活动”,请选择引导配置文件并等待状态变为“活动”。
将您的游戏与 Amazon 集成 GameLift
对于此任务,您需要更新游戏项目中的客户端和服务器代码。
-
游戏服务器必须能够与 Amazon GameLift 服务通信,才能收到启动游戏会话的提示、提供游戏会话连接信息和报告状态。
-
游戏客户端必须能够获取有关游戏会话的信息、加入或启动游戏会话以及获取连接信息才能加入游戏。
注意
如果您导入了示例游戏,则可以跳过这一步。示例游戏资产已准备好所需的服务器和客户端代码。
集成服务器代码
将您自己的游戏项目与自定义场景一起使用时,请使用提供的示例代码将所需的服务器代码添加到您的游戏项目。如果您已将游戏项目与 Anywhere 实例集集成以进行测试,您就已经完成此步骤中的指令。
-
在您的游戏项目文件中,打开
Assets/Scripts/Server
文件夹。如果该文件夹不存在,请创建它。 -
前往 aws/ GitHub
仓库amazon-gamelift-plugin-unity并打开路径。 Samples~/SampleGame/Assets/Scripts/Server
-
找到文件
GameLiftServer.cs
并将其复制到游戏项目的Server
文件夹中。构建服务器可执行文件时,请使用此文件作为构建目标。
示例代码包括以下最低必需元素,它们使用 Amazon GameLift C# 服务器软件开发工具包(版本 5):
-
初始化亚马逊 GameLift API 客户端。Amazon GameLift Anywhere 队列需要使用带有服务器参数的 initSDK () 调用。这些设置会自动设置,以便在插件中使用。
-
实现所需的回调函数以响应 Amazon GameLift 服务的请求
OnStartGameSession
,包括OnProcessTerminate
、和onHealthCheck
。 -
ProcessReady()
使用指定端口调用,以便在服务器进程准备好托管游戏会话时通知 Amazon GameLift 服务。
如果要自定义示例服务器代码,请参阅以下资源:
集成客户端代码
对于连接到基于云的游戏服务器的游戏客户端,最佳做法是使用客户端后端服务来调用 Amazon GameLift 服务,而不是直接从游戏客户端拨打电话。
在托管 EC2 队列上托管的插件工作流程中,每个部署场景都包含一个包含以下组件的预建后端服务:
-
一组 Lambda 函数和 DynamoDB 表,用于请求游戏会话和检索游戏会话信息。这些组件使用 API 网关作为代理。
-
一个 Amazon Cognito 用户池,用于生成唯一玩家 IDs 并对玩家连接进行身份验证。
要使用这些组件,游戏客户端需要能够向后端服务发送执行以下操作的请求:
-
在 C AWS ognito 用户池中创建玩家用户并进行身份验证。
-
加入游戏会话并接收连接信息。
-
使用对战加入游戏。
请使用以下资源作为指南。
-
将客户端与 GitHub repo 中的 GameLiftCoreApi
类集成 aw amazon-gamelift-plugin-unity s/。该类提供了用于玩家身份验证和检索游戏会话信息的控件。 -
要查看示例游戏集成,请访问 GitHub repo aw amazon-gamelift-plugin-unity
s/,。 Samples~/SampleGame/Assets/Scripts/Client/GameLiftClient.cs
选择部署方案
在此步骤中,您可以选择此时要部署的游戏托管解决方案。使用任何方案,您都可以对游戏进行多个部署。
单区域队列:将您的游戏服务器部署到活动配置文件默认 AWS 区域中的单个托管资源队列。此场景是测试服务器与服务器版本配置的集成 AWS 和服务器版本配置的良好起点。它部署了以下资源:
已安装并运行游戏服务器构建的AWS 实例集(按需型)。
Amazon Cognito 用户群体和客户端,使玩家能够进行身份验证和开始游戏。
与 APIs用户池关联的 API 网关授权器。
Web ACl 用于限制玩家对 API 网关的过多调用。
API 网关 + Lambda 函数,供玩家申请游戏位置。如果两者都不可用,则此函数调用
CreateGameSession()
。API 网关 + Lambda 函数,供玩家获取游戏请求的连接信息。
FlexMatch 舰队:将你的游戏服务器部署到一组舰队中,并设置一个带有规则的 FlexMatch 匹配器来创建玩家对战。此方案使用低成本的竞价型托管和一个多实例集、多位置结构,以实现持久可用性。当您准备好开始为托管解决方案设计对战构建器组件时,此方法非常有用。在这种方案下,您将为此解决方案创建基本资源,并可以根据需要后续对其进行自定义。它部署了以下资源:
FlexMatch 配对配置和配对规则设置为接受玩家请求和表单匹配。
-
三个 AWS 实例集,安装了游戏服务器构建,并在多个位置运行。包括两个竞价型实例集和一个按需型实例集作为备份。
-
AWS 游戏会话放置队列,通过寻找尽可能好的托管资源(基于可行性、成本、玩家延迟等)并启动游戏会话来满足对提议对战的请求。
-
Amazon Cognito 用户群体和客户端,使玩家能够进行身份验证和开始游戏。
-
与 APIs用户池关联的 API 网关授权器。
-
Web ACl 用于限制玩家对 API 网关的过多调用。
-
API 网关 + Lambda 函数,供玩家申请游戏位置。此函数调用
StartMatchmaking()
。 -
API 网关 + Lambda 函数,供玩家获取游戏请求的连接信息。
-
Amazon DynamoDB 表,用于存储玩家的对战票证和游戏会话信息。
-
SNS 主题 + 用于处理事件的 Lambda 函数。 GameSessionQueue
设置游戏参数
在此步骤中,您将描述要上传到的游戏 AWS。
-
游戏名称:为游戏项目提供一个有意义的名称。此名称在插件中使用。
-
舰队名称:为您的托管 EC2 车队提供一个有意义的名称。Amazon 在 AWS 控制台中列出资源时 GameLift 使用此名称(以及舰队 ID)。
-
版本名称:为您的服务器版本提供一个有意义的名称。 AWS 使用此名称来指代已上传到 Amazon GameLift 并用于部署的服务器版本的副本。
-
启动参数:输入在托管 EC2 队列实例上启动服务器可执行文件时要运行的可选说明。最大长度为 1024 个字符。
-
游戏服务器文件夹:提供包含服务器生成包的本地文件夹的路径。
-
游戏服务器文件:指定服务器可执行文件的名称。
部署方案
在此步骤中,您将根据所选的部署方案将游戏部署到云托管解决方案。在 AWS 验证服务器生成包、预置托管资源、安装游戏服务器、启动服务器进程以及让它们做好托管游戏会话的准备时,此过程可能需要数分钟。
要开始部署,请选择部署 CloudFormation。您可以在此处跟踪您的游戏托管状态。要了解更多详细信息,您可以登录 AWS 管理控制台查看 AWS 和查看事件通知。请务必使用与插件中活跃用户个人资料相同的账户、用户和 AWS 地区登录。
部署完成后,您的游戏服务器已安装在 AWS EC2 实例上。至少有一个服务器进程正在运行并准备开始游戏会话。
启动游戏客户端
成功部署实例集后,您的游戏服务器就会开始运行,并可用于托管游戏会话。现在,您可以构建客户端、启动客户端、连接以加入游戏会话。
-
配置游戏客户端。在此步骤中,您将提示插件更新游戏项目的
GameLiftClientSettings
资产。该插件使用此资产来存储您的游戏客户端连接到 Amazon GameLift 服务所需的某些信息。-
如果您没有导入和初始化示例游戏,请创建一个新的
GameLiftClientSettings
资产。在 Unity 编辑器主菜单中,选择 “资源”、“创建” GameLift、“客户端设置”。如果您在项目 GameLiftClientSettings 中创建了多个副本,插件会自动检测到这一点,并通知您该插件将更新哪个资产。 -
在 Launch Game 中,选择配置客户端:应用托管 EC2设置。此操作会更新您的游戏客户端设置以使用您刚刚部署的托管 EC2 舰队。
-
-
构建游戏客户端。使用标准 Unity 构建流程构建客户端可执行文件。在“文件”、“构建设置”中,将平台切换为 Windows、Mac 或 Linux。如果您导入了示例游戏并初始化了设置,则构建列表和构建目标会自动更新。
-
启动新构建的游戏客户端可执行文件。要开始玩游戏,请启动两到四个客户端实例,并在每个实例中使用 UI 以加入游戏会话。
如果您使用的是示例游戏客户端,那么它具有以下特征:
-
一个玩家登录组件。连接到 Anywhere 实例集上的游戏服务器时,不会进行玩家验证。您可以输入任意值来加入游戏会话。
-
一个简单的加入游戏 UI。当一个客户端尝试加入游戏时,该客户端会自动查找有可用玩家位置的活动游戏会话。如果没有可用的游戏会话,该客户端会请求新的游戏会话。如果有可用的游戏会话,该客户端会请求加入该游戏会话。使用多个并发客户端来测试游戏时,第一个客户端会启动游戏会话,其余客户端会自动加入现有的游戏会话。
-
有四个玩家位置的游戏会话。您最多可以同时启动四个游戏客户端实例,它们将加入同一游戏会话。