

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

# 适用于 Unity 的插件：将游戏部署到托管式 EC2 实例集
<a name="unity-plug-in-ec2"></a>

在此工作流程中，您将使用插件准备游戏，使其托管在由 Amazon GameLift Servers 管理的基于云的计算资源上。您需要为 Amazon GameLift Servers 功能添加客户端和服务器游戏代码，然后将服务器生成包上传到 Amazon GameLift Servers 服务进行托管。此工作流程完成后，您将拥有在云中运行的游戏服务器，以及可以连接到该服务器且正常运行的游戏客户端。

**要启动 Amazon GameLift Servers 托管的 Amazon EC2 工作流程，请执行以下操作：**
+ 在 Unity 编辑器主菜单中，选择 **Amazon GameLift Servers**，然后选择**通过托管式 EC2 进行托管**。此工作流程提供了集成、构建、部署和启动游戏组件的六步流程。

## 设置配置文件
<a name="unity-plug-in-ec2-profile"></a>

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

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

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

## 将您的游戏与 Amazon GameLift Servers 集成
<a name="unity-plug-in-ec2-integrate"></a>

对于此任务，您需要更新游戏项目中的客户端和服务器代码。
+ 游戏服务器必须能够与 Amazon GameLift Servers 服务通信才能接收启动游戏会话的提示、提供游戏会话连接信息和报告状态。
+ 游戏客户端必须能够获取有关游戏会话的信息、加入或启动游戏会话以及获取连接信息才能加入游戏。

**注意**  
如果您导入了示例游戏，则可以跳过这一步。示例游戏资产已准备好所需的服务器和客户端代码。

### 集成服务器代码
<a name="unity-plug-in-ec2-integrate-server"></a>

将您自己的游戏项目与自定义场景一起使用时，请使用提供的示例代码将所需的服务器代码添加到您的游戏项目。如果您已将游戏项目与 Anywhere 实例集集成以进行测试，您就已经完成此步骤中的指令。

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

1. 前往 [aws/ GitHub ](https://github.com/aws/amazon-gamelift-plugin-unity) 仓库amazon-gamelift-plugin-unity并打开路径。`Samples~/SampleGame/Assets/Scripts/Server`

1. 找到文件 `GameLiftServer.cs` 并将其复制到游戏项目的 `Server` 文件夹中。构建服务器可执行文件时，请使用此文件作为构建目标。

示例代码包含以下所需的最少元素，这些元素使用了 Amazon GameLift Servers C\# 服务器 SDK（版本 5）：
+ 初始化 Amazon GameLift Servers API 客户端。Amazon GameLift Servers Anywhere 实例集需要使用服务器参数进行 InitSDK() 调用。这些设置会自动设置，以便在插件中使用。
+ 实施所需的回调函数以响应来自 Amazon GameLift Servers 服务的请求，包括 `OnStartGameSession`、`OnProcessTerminate`、和 `onHealthCheck`。
+ 当服务器进程准备好托管游戏会话时，请使用指定端口调用 `ProcessReady()` 以通知 Amazon GameLift Servers 服务。

如果要自定义示例服务器代码，请参阅以下资源：
+ [借助服务器 SDK 将 Amazon GameLift Servers 添加到游戏服务器](gamelift-sdk-server-api.md)
+ [适用于 Amazon GameLift Servers 的 C\# 服务器 SDK 5.x – 操作](integration-server-sdk5-csharp-actions.md)

### 集成客户端代码
<a name="unity-plug-in-ec2-integrate-client"></a>

对于连接到基于云的游戏服务器的游戏客户端，最佳实践是使用客户端后端服务对 Amazon GameLift Servers 服务进行调用，而不是直接从游戏客户端进行调用。

在托管在托管式 EC2 实例集上的插件工作流程中，每个部署方案都包含一个预先构建的后端服务，其中包含以下组件：
+ 一组 Lambda 函数和 DynamoDB 表，用于请求游戏会话和检索游戏会话信息。这些组件使用 API 网关作为代理。
+ 一个 Amazon Cognito 用户池，用于生成唯一玩家 IDs 并对玩家连接进行身份验证。

要使用这些组件，游戏客户端需要能够向后端服务发送执行以下操作的请求：
+ 在 C AWS ognito 用户池中创建玩家用户并进行身份验证。
+ 加入游戏会话并接收连接信息。
+ 使用对战加入游戏。

请使用以下资源作为指南。
+ 将客户端与 GitHub repo 中的[ GameLiftCoreApi](https://github.com/aws/amazon-gamelift-plugin-unity/blob/main/Runtime/GameLiftCoreApi.cs)类集成 [aw amazon-gamelift-plugin-unity](https://github.com/aws/amazon-gamelift-plugin-unity) s/。该类提供了用于玩家身份验证和检索游戏会话信息的控件。
+ 要查看示例游戏集成，请访问 GitHub repo [aw amazon-gamelift-plugin-unity](https://github.com/aws/amazon-gamelift-plugin-unity) s/，。`Samples~/SampleGame/Assets/Scripts/Client/GameLiftClient.cs`
+ [集成 Amazon GameLift Servers 游戏客户端功能](gamelift-sdk-client-api.md).

### （仅限 Unity 6.3\+）集成 install.sh 脚本
<a name="unity-plug-in-ec2-integrate-install-script"></a>

Linux 上的 Unity 6.3 需要 glibc 2.35。亚马逊 Linux 2023 包括 glibc 2.34。提供了一个 install.sh 脚本，用于处理从源代码构建 glibc 2.35 以及将 Unity 二进制文件配置为使用 glibc 2.35。

1. 前往 [aws/ GitHub ](https://github.com/aws/amazon-gamelift-plugin-unity) 仓库amazon-gamelift-plugin-unity并打开路径。`ExtraServerResources`

1. 找到该文件`install.sh`并将其复制到包含您的服务器版本的文件夹中。

1.  如果您已有脚本`install.sh`，请将两个脚本的内容合并为一个`install.sh`。

## 选择部署方案
<a name="unity-plug-in-ec2-scenarios"></a>

在此步骤中，您可以选择此时要部署的游戏托管解决方案。使用任何方案，您都可以对游戏进行多个部署。
+ **单区域队列：**将您的游戏服务器部署到活动配置文件默认 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 

## 设置游戏参数
<a name="unity-plug-in-ec2-parameters"></a>

在此步骤中，您将描述要上传到的游戏 AWS。
+ **游戏名称：**为游戏项目提供一个有意义的名称。此名称在插件中使用。
+ **实例集名称：**为托管式 EC2 实例集提供一个有意义的名称。Amazon GameLift Servers 在 AWS 控制台中列出资源时会使用此名称（以及实例集 ID）。
+ **版本名称：**为您的服务器版本提供一个有意义的名称。 AWS 使用此名称来指代已上传到Amazon GameLift Servers并用于部署的服务器版本的副本。
+ **启动参数：**输入在托管式 EC2 实例集实例上启动服务器可执行文件时要运行的可选指令。最大长度为 1024 个字符。
+ **游戏服务器文件夹：**提供包含服务器生成包的本地文件夹的路径。
+ **游戏服务器文件：**指定服务器可执行文件的名称。

## 部署方案
<a name="unity-plug-in-ec2-deploy"></a>

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

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

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

## 启动游戏客户端
<a name="unity-plug-in-ec2-launch"></a>

成功部署实例集后，您的游戏服务器就会开始运行，并可用于托管游戏会话。现在，您可以构建客户端、启动客户端、连接以加入游戏会话。

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

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

   1. 在**启动游戏**中，选择**配置客户端：应用托管式 EC2 设置**。此操作将更新游戏客户端设置，以使用您刚刚部署的托管式 EC2 实例集。

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

1. 启动新构建的游戏客户端可执行文件。要开始玩游戏，请启动两到四个客户端实例，并在每个实例中使用 UI 以加入游戏会话。

如果您使用的是示例游戏客户端，那么它具有以下特征：
+ 一个玩家登录组件。连接到 Anywhere 实例集上的游戏服务器时，不会进行玩家验证。您可以输入任意值来加入游戏会话。
+ 一个简单的加入游戏 UI。当一个客户端尝试加入游戏时，该客户端会自动查找有可用玩家位置的活动游戏会话。如果没有可用的游戏会话，该客户端会请求新的游戏会话。如果有可用的游戏会话，该客户端会请求加入该游戏会话。使用多个并发客户端来测试游戏时，第一个客户端会启动游戏会话，其余客户端会自动加入现有的游戏会话。
+ 有四个玩家位置的游戏会话。您最多可以同时启动四个游戏客户端实例，它们将加入同一游戏会话。