使用托管 EC2 实例集将游戏部署到云托管 - Amazon GameLift

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

使用托管 EC2 实例集将游戏部署到云托管

在此工作流程中,您将使用插件为托管在 Amazon 管理的基于云的计算资源上进行游戏准备 GameLift。您可以为亚马逊 GameLift 功能添加客户端和服务器游戏代码,然后将您的服务器版本上传到亚马逊 GameLift 服务进行托管。此工作流程完成后,游戏服务器将在云端运行,并有一个可以与之连接的游戏客户端。

要启动亚马逊 GameLift 托管的 Amazon EC2 工作流程,请执行以下操作:
  • 在 Unity 编辑器主菜单中,选择 Amazon, GameLift然后选择使用托管 EC2 的主机。此工作流程提供了一个集成、构建、部署和启动游戏组件的六步流程。

设置您的个人资料

选择您要在遵循此工作流程时使用的配置文件。您选择的配置文件会影响工作流程中的所有步骤。您创建的所有资源都与配置文件的 AWS 账户相关联,并放置在配置文件的默认 AWS 区域中。配置文件用户的权限决定了您对 AWS 资源和操作的访问权限。

  1. 从可用配置文件的下拉列表中选择一个配置文件。如果您还没有个人资料或想要创建新的个人资料,请前往 Amazon GameLift 菜单并选择 “设置AWS账户资料”。

  2. 如果引导状态不是“活动”,请选择引导配置文件并等待状态变为“活动”。

将您的游戏与 Amazon 集成 GameLift

对于此任务,您需要更新游戏项目中的客户端和服务器代码。

  • 游戏服务器必须能够与 Amazon GameLift 服务通信,才能收到启动游戏会话的提示、提供游戏会话连接信息和报告状态。

  • 游戏客户端必须能够获取有关游戏会话的信息、加入或开始游戏会话以及获取连接信息才能加入游戏。

注意

如果您导入了示例游戏,则可以跳过此步骤。示例游戏资产已经准备好了必要的服务器和客户端代码。

集成您的服务器代码

在自定义场景中使用自己的游戏项目时,请使用提供的示例代码将所需的服务器代码添加到游戏项目中。如果您将要测试的游戏项目与 Anywhere 队列集成,则您已经完成了此步骤中的说明。

  1. 在游戏项目文件中,打开文件Assets/Scripts/Server夹。如果它不存在,请创建它。

  2. 前往 aws/ GitHub 仓库amazon-gamelift-plugin-unity并打开路径。Samples~/SampleGame/Assets/Scripts/Server

  3. 找到该文件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 用户池,用于生成唯一的玩家 ID 并对玩家连接进行身份验证。

要使用这些组件,您的游戏客户端需要能够向后端服务发送请求以执行以下操作:

  • 在 C AWS ognito 用户池中创建玩家用户并进行身份验证。

  • 加入游戏会话并接收连接信息。

  • 使用配对加入游戏。

使用以下资源作为指导。

选择部署方案

在此步骤中,您可以选择此时要部署的游戏托管解决方案。使用任何方案,您都可以对游戏进行多个部署。

  • 单区域队列:将您的游戏服务器部署到活动配置文件默认AWS区域中的单个托管资源队列。此方案是测试服务器与 AWS 集成和服务器构建配置的良好起点。它部署了以下资源:

    • 已安装并运行游戏服务器构建的 AWS 实例集(按需型)。

    • Amazon Cognito 用户群体和客户端,使玩家能够进行身份验证和开始游戏。

    • 将用户群体与 API 关联的 API 网关授权器。

    • WebACL,用于限制玩家对 API 网关的过多调用。

    • API 网关 + Lambda 函数,供玩家申请游戏位置。如果两者都不可用,则此函数调用 CreateGameSession()

    • API 网关 + Lambda 函数,供玩家获取游戏请求的连接信息。

  • FlexMatch 舰队:将你的游戏服务器部署到一组舰队中,并设置一个带有规则的 FlexMatch 匹配器来创建玩家对战。此场景使用低成本 Spot 托管和多舰队、多地点结构,以实现持久可用性。当您准备开始为托管解决方案设计匹配器组件时,这种方法非常有用。在这种情况下,您将为此解决方案创建基本资源,以后可以根据需要对其进行自定义。它部署了以下资源:

    • FlexMatch 配对配置和配对规则设置为接受玩家请求和表单匹配。

    • 三个 AWS 实例集,安装了游戏服务器构建,并在多个位置运行。包括两个竞价型实例集和一个按需型实例集作为备份。

    • AWS 游戏会话放置队列,通过寻找尽可能好的托管资源(基于可行性、成本、玩家延迟等)并启动游戏会话来满足对提议对战的请求。

    • Amazon Cognito 用户群体和客户端,使玩家能够进行身份验证和开始游戏。

    • 将用户群体与 API 关联的 API 网关授权器。

    • WebACL,用于限制玩家对 API 网关的过多调用。

    • API 网关 + Lambda 函数,供玩家申请游戏位置。此函数调用 StartMatchmaking()

    • API 网关 + Lambda 函数,供玩家获取游戏请求的连接信息。

    • Amazon DynamoDB 表,用于存储玩家的对战票证和游戏会话信息。

    • SNS 主题 + 用于处理事件的 Lambda 函数。 GameSessionQueue

设置游戏参数

在此步骤中,您将描述要上传到 AWS 的游戏。

  • 游戏名称:为您的游戏项目提供一个有意义的名称。此名称在插件中使用。

  • 队列名称:为您的托管 EC2 队列提供一个有意义的名称。Amazon 在AWS控制台中列出资源时 GameLift 使用此名称(以及舰队 ID)。

  • 版本名称:为您的服务器版本提供一个有意义的名称。 AWS使用此名称来指代已上传到 Amazon GameLift 并用于部署的服务器版本的副本。

  • 启动参数:输入在托管 EC2 队列实例上启动服务器可执行文件时要运行的可选说明。最大长度为 1024 个字符。

  • 游戏服务器文件夹:提供包含您的服务器版本的本地文件夹的路径。

  • 游戏服务器文件:指定服务器可执行文件名。

部署场景

在此步骤中,您将根据所选的部署方案将游戏部署到云托管解决方案。在 AWS 验证服务器构建、配置托管资源、安装游戏服务器、启动服务器进程以及让它们做好托管游戏会话的准备时,此过程可能需要长达 40 分钟。

要开始部署,请选择部署 CloudFormation。您可以在此处跟踪您的游戏托管状态。要了解更多详细信息,您可以登录 AWS 管理控制台了解 AWS 和查看事件通知。请务必使用与插件中活跃用户配置文件相同的账户、用户和 AWS 区域登录。

部署完成后,您的游戏服务器将安装在 AWS EC2 实例上。至少有一个服务器进程正在运行并准备开始游戏会话。

启动游戏客户端

成功部署队列后,游戏服务器就会运行并可供托管游戏会话。现在,您可以构建客户端、启动客户端、连接以加入游戏会话。

  1. 配置您的游戏客户端。在此步骤中,您将提示插件更新游戏项目的GameLiftClientSettings资产。该插件使用此资产来存储您的游戏客户端连接到 Amazon GameLift 服务所需的某些信息。

    1. 如果您没有导入和初始化示例游戏,请创建一个新GameLiftClientSettings资产。在 Unity 编辑器主菜单中,选择资源、创建 GameLift、客户端设置。如果您在项目 GameLiftClientSettings 中创建了多个副本,插件会自动检测到这一点,并通知您该插件将更新哪个资产。

    2. Launch Game 中,选择配置客户端:应用托管 EC2 设置。此操作会更新您的游戏客户端设置以使用您刚刚部署的托管 EC2 队列。

  2. 构建您的游戏客户端。使用标准 Unity 编译流程生成客户端可执行文件。在 “文件”、“生成设置” 中,将平台切换到 Windows、Mac、Linux。如果您导入了示例游戏并初始化了设置,则构建列表和构建目标会自动更新。

  3. 启动新构建的游戏客户端可执行文件。要开始玩游戏,请启动两到四个客户端实例,然后使用每个实例中的用户界面加入游戏会话。

如果您使用的是示例游戏客户端,则它具有以下特征:

  • 玩家登录组件。连接到 Anywhere 舰队上的游戏服务器时,不会进行玩家验证。您可以输入任何值来加入游戏会话。

  • 一个简单的加入游戏用户界面。当客户尝试加入游戏时,客户端会自动寻找具有可用玩家插槽的活跃游戏会话。如果没有可用的游戏会话,则客户端会请求新的游戏会话。如果游戏会话可用,则客户端会请求加入可用的游戏会话。使用多个并发客户端测试游戏时,第一个客户端会启动游戏会话,其余客户端会自动加入现有的游戏会话。

  • 有四个玩家插槽的游戏会话。您最多可以同时启动四个游戏客户端实例,它们将加入同一个游戏会话。