

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

# 适用于 Unity 的插件：使用 Amazon GameLift Servers Anywhere 设置本地测试
<a name="unity-plug-in-anywhere"></a>

在此工作流程中，您可以为 Amazon GameLift Servers 功能添加客户端和服务器游戏代码，然后使用该插件将您的本地工作站指定为测试游戏服务器主机。完成集成任务后，使用该插件来构建您的游戏客户端和服务器组件。

**要启动 Amazon GameLift Servers Anywhere 工作流程，请执行以下操作：**
+ 在 Unity 编辑器主菜单中，选择 **Amazon GameLift Servers**，然后选择**通过 Anywhere 托管**。此操作将打开插件页面，用于使用 @Anywhere 实例集设置您的游戏。该页面提供了集成、构建和启动游戏组件的五步流程。

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

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

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

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

## 将游戏代码与 C\# 服务器 SDK 集成。
<a name="unity-plug-in-anywhere-integrate"></a>

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

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

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

如果将您自己的游戏项目与自定义场景一起使用，请使用提供的示例代码将所需的服务器代码添加到您的游戏项目：

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-anywhere-integrate-client"></a>

如果将您自己的游戏项目与自定义场景一起使用，则需要将基本功能集成到游戏客户端。您还需要添加 UI 元素，让玩家可以登录并加入游戏会话。使用Amazon GameLift Servers（在 AWS SDK 中）的服务 API 来获取游戏会话信息、创建新的游戏会话或加入现有游戏会话，

使用 Anywhere 实例集构建要进行本地测试的客户端时，您可以添加对 Amazon GameLift Servers 服务的直接调用。当您开发要进行云托管的游戏时（或者您计划使用 Anywhere 实例集进行生产托管），您需要创建一个客户端后端服务来处理游戏客户端和 Amazon GameLift Servers 服务之间的所有通信。

要将 Amazon GameLift Servers 集成到客户端代码，请使用以下资源作为指南。
+ 将客户端与 GitHub repo 中的 GameLiftCoreApi 类集成 aw amazon-gamelift-plugin-unity s/。该类提供了用于玩家身份验证和检索游戏会话信息的控件。
+ 查看示例游戏集成，可在 GitHub 存储库 aw amazon-gamelift-plugin-unity s/ 中找到。`Samples~/SampleGame/Assets/Scripts/Client/GameLiftClient.cs`
+ 按照“将 Amazon GameLift Servers 添加到您的 Unity 游戏客户端”中的说明进行操作。

对于连接到 Anywhere 实例集的游戏客户端，您的游戏客户端需要以下信息。插件会自动更新您的游戏项目，以使用您在插件中创建的资源。
+ FleetId -您的 Anywhere 车队的唯一标识符。
+ FleetLocation -您的 Anywhere 舰队的自定义位置。
+ AwsRegion -托管您的 Anywhere 舰队的 AWS 区域。这是您在用户配置文件中设置的区域。
+ ProfileName -本地计算机上的 AWS 凭据配置文件，允许访问的 AWS SDK Amazon GameLift Servers。游戏客户端使用这些凭证来验证对 Amazon GameLift Servers 服务的请求的身份。

**注意**  
凭证配置文件由插件生成并存储在本地计算机上。因此，您必须在本地计算机（或具有相同配置文件的计算机上）上运行客户端。

## 连接到 Anywhere 实例集
<a name="unity-plug-in-anywhere-fleet"></a>

在此步骤中，您将指定要使用的 Anywhere 实例集。Anywhere 实例集定义了一组计算资源，这些资源可以位于任何地方，用于托管游戏服务器。
+ 如果您当前使用的 AWS 账户已有 Anywhere 舰队，请打开**舰队名称**下拉字段并选择舰队。此下拉列表仅显示当前活跃用户配置文件 AWS 所在地区的 Anywhere 舰队。
+ 如果目前没有实例集，或者您想创建新实例集，请选择**创建新的 Anywhere 实例集**并提供实例集名称。

在您为项目选择 Anywhere 实例集后，Amazon GameLift Servers 会验证实例集状态是否处于活动状态并显示实例集 ID。您可以在 Unity 编辑器的输出日志中跟踪此请求的进度。

## 注册计算
<a name="unity-plug-in-anywhere-register"></a>

在此步骤中，您将本地工作站注册为新的 Anywhere 实例集中的计算资源。

1. 输入本地计算机的计算名称。如果您在实例集中添加多个计算，则名称必须是唯一的。

1. 选择**注册计算**。您可以在 Unity 编辑器的输出日志中跟踪此请求的进度。

插件会注册您的本地工作站，并将 IP 地址设置为 localhost（127.0.0.1）。此设置假定您将在同一台计算机上运行游戏客户端和服务器。

作为对这一操作的响应，Amazon GameLift Servers 会验证它是否可以连接到计算并返回有关新注册的计算的信息。

## 启动游戏
<a name="unity-plug-in-anywhere-launch"></a>

在此步骤中，您将构建游戏组件并启动它们来玩游戏。完成以下任务：

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

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

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

1. 构建并运行游戏客户端。

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

   1. 启动新构建的游戏客户端可执行文件的一个或多个实例。

1. 在 Anywhere 实例集中启动游戏服务器。选择**服务器：在编辑器中启动服务器**。此任务将启动一个实时服务器，只要 Unity 编辑器保持打开状态，您的客户端就可以连接到该服务器。

1. 启动或加入游戏会话。在您的游戏客户端实例中，使用 UI 将每个客户端加入游戏会话。如何执行此操作取决于您是如何向客户端添加功能的。

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

**通过服务器可执行文件启动（可选）**

您可以构建并启动游戏服务器可执行文件，以便在 Anywhere 实例集上进行测试。

1. 使用标准 Unity 构建流程构建服务器可执行文件。在**文件、构建设置**中，将平台切换为**专用服务器**，然后构建。

1. 使用您的 Anywhere 舰队 ID 和 AWS 区域调用 AWS CLI 命令 [get-compute-auth-token](https://docs.aws.amazon.com/cli/latest/reference/gamelift/get-compute-auth-token.html)，获取短期身份验证令牌。当您创建实例集时，实例集 ID 将显示在**连接到 Anywhere 实例集**中。当您选择有效的**个人资料时，该 AWS 地区将显示在 “设置您的**个人资料” 中。

   ```
   aws gamelift get-compute-auth-token --fleet-id [your anywhere fleet ID] --region [your AWS region]
   ```

1. 通过命令行启动新构建的游戏服务器可执行文件，并传入有效的身份验证令牌。

   ```
   my_project.exe --authToken [token]
   ```