

适用于 Unity 的 AWS 移动 SDK 现已包含在 适用于 .NET 的 AWS SDK。本指南引用适用于 Unity 的 Mobile SDK 的存档版本。有关更多信息，请参阅 [适用于 Unity 的 AWS 移动 SDK 是什么？](what-is-unity-plugin.md)。

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

# 设置适用于 Unity 的 AWS Mobile SDK
<a name="setup-unity"></a>

要开始使用适用于 Unity 的 AWS Mobile SDK，您可以设置该 SDK 并开始构建一个新项目，也可以将该 SDK 与现有项目集成。您还可以克隆并运行[示例](https://github.com/awslabs/aws-sdk-unity-samples)，以便了解该 SDK 的工作原理。

## 先决条件
<a name="prerequisites"></a>

在可以使用适用于 Unity 的 AWS Mobile SDK 之前，您需要以下内容：
+  [一个 AWS 账户](https://aws.amazon.com/) 
+ Unity 4.x 或 5.x 版 (如果您希望编写在 64 位 iOS 上运行的应用程序，则需要 Unity 4.6.4p4 或 Unity 5.0.1p3)

满足先决条件后，您需要执行以下操作来开始使用该 SDK：

1. 下载适用于 Unity 的 AWS Mobile SDK。

1. 配置适用于 Unity 的 AWS Mobile SDK。

1. 使用 Amazon Cognito 获取 AWS 凭证。

## 第 1 步：下载适用于 Unity 的 AWS Mobile SDK
<a name="step-1-download-the-aws-mobile-sdk-for-unity"></a>

首先，[下载适用于 Unity 的 AWS Mobile SDK](http://sdk-for-net.amazonwebservices.com/latest/aws-sdk-unity.zip)。该 SDK 中的每个软件包是使用与软件包名称对应的 AWS 服务所必需的。例如， aws-unity-sdk-dynamodb-2.1.0.0.unitypackage 包用于调用 AWS DynamoDB 服务。您可以导入所有包，也可以仅导入要使用的包。

1. 打开 Unity 编辑器，新建一个空项目并使用默认设置。

1. 选择 **Assets** > **Import Package** > **Custom Package**。

1. 在 **Import package** 对话框中，导航到您要使用的 .unitypackage 文件并选择这些文件。

1. 在 **Importing package** 对话框中，确保选中所有项目，然后单击 **Import**。

## 第 2 步：配置适用于 Unity 的 AWS Mobile SDK
<a name="step-2-configure-the-aws-mobile-sdk-for-unity"></a>

### 创建场景
<a name="create-a-scene"></a>

使用适用于 Unity 的 AWS Mobile SDK 时，您可以首先在 mono 行为类的 `Start` 或 `Awake` 方法中包含以下代码行：

```
UnityInitializer.AttachToGameObject(this.gameObject);
```

通过从 **File** 菜单中选择 **New Scene** 创建场景。

适用于 Unity 的 AWS SDK 包含用于其支持的每个 AWS 服务的客户端类。这些客户端使用名为 **awsconfig.xml** 的文件进行配置。下面一部分介绍 **awsconfig.xml** 文件中最常用的设置。有关这些设置的更多信息，请参阅[《Unity SDK API 参考》](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/Index.html)。

### 设置默认 AWS 服务区域
<a name="set-the-default-aws-service-region"></a>

为所有服务客户端配置默认区域：

```
<aws region="us-west-2" />
```

这会为 Unity SDK 中的所有服务客户端设置默认区域。通过在创建服务客户端的实例时明确指定区域，可以覆盖此设置，如下所示：

```
IAmazonS3 s3Client = new AmazonS3Client(<credentials>,RegionEndpoint.USEast1);
```

### 设置日志记录信息
<a name="set-logging-information"></a>

按如下所示指定日志记录设置：

```
<logging logTo="UnityLogger"
         logResponses="Always"
         logMetrics="true"
         logMetricsFormat="JSON" />
```

此设置用于在 Unity 中配置日志记录。当您将日志记录到 `UnityLogger` 时，该框架会在内部将输出发送到调试日志。如果要记录 HTTP 响应，请设置 LogResponses 标志，其值可以是 “始终”、“从不” 或。 OnError您还可以使用 LogMetrics 属性记录 HTTP 请求的性能指标，日志格式可以使用 LogMetricsFormat属性指定，有效值为 JSON 或标准。

以下示例演示 awsconfig.xml 文件中最常用的设置。有关特定服务设置的更多信息，请参阅以下服务部分：

```
<?xml version="1.0" encoding="utf-8"?>
<aws region="us-west-2"
    <logging logTo="UnityLogger"
             logResponses="Always"
             logMetrics="true"
             logMetricsFormat="JSON" />
/>
```

### 使用 link.xml 文件
<a name="working-with-the-link-xml-file"></a>

该 SDK 对特定于平台的组件使用反射。如果您使用的是 IL2 CPP脚本后端，`strip bytecode`则在iOS上始终处于启用状态，因此您需要在程序集根目录中有一个包含以下条目的`link.xml`文件：

```
<linker>
<!-- if you are using AWSConfigs.HttpClient.UnityWebRequest option-->
<assembly fullname="UnityEngine">
    <type fullname="UnityEngine.Networking.UnityWebRequest" preserve="all" />
    <type fullname="UnityEngine.Networking.UploadHandlerRaw" preserve="all" />
    <type fullname="UnityEngine.Networking.UploadHandler" preserve="all" />
    <type fullname="UnityEngine.Networking.DownloadHandler" preserve="all" />
    <type fullname="UnityEngine.Networking.DownloadHandlerBuffer" preserve="all" />
</assembly>
<assembly fullname="mscorlib">
    <namespace fullname="System.Security.Cryptography" preserve="all"/>
</assembly>
<assembly fullname="System">
    <namespace fullname="System.Security.Cryptography" preserve="all"/>
</assembly>
<assembly fullname="AWSSDK.Core" preserve="all"/>
<assembly fullname="AWSSDK.CognitoIdentity" preserve="all"/>
<assembly fullname="AWSSDK.SecurityToken" preserve="all"/>
add more services that you need here...
</linker>
```

## 第 3 步：使用 Amazon Cognito 获取身份池 ID
<a name="step-3-obtain-the-identity-pool-id-using-amazon-cognito"></a>

要在移动应用程序中使用 AWS 服务，您必须使用 Amazon Cognito Identity 获取身份池 ID。使用 Amazon Cognito 获取身份池 ID 可让您的应用程序能够直接访问 AWS 服务，而不必在应用程序中嵌入您的私有凭证。这还允许您设置权限来控制用户有权访问的 AWS 服务。

要开始使用 Amazon Cognito，您必须创建一个身份池。身份池是用于存储特定于您的账户的用户身份数据的存储区。每个身份池都有可配置的 IAM 角色，您可以使用这些角色来指定应用程序的用户可以访问的 AWS 服务。通常情况下，开发人员对每个应用程序使用一个身份池。有关身份池的更多信息，请参阅 [Amazon Cognito 开发人员指南](https://docs.aws.amazon.com/cognito/latest/developerguide/identity-pools.html)。

为应用程序创建身份池：

1. 登录 [Amazon Cognito 控制台](https://console.aws.amazon.com/cognito/home)，然后单击 **Create new identity pool**。

1. 输入身份池的名称，并选中“启用未经验证的身份的访问权限”复选框。单击 **Create Pool (创建池)** 创建身份池。

1. 单击**允许**可创建两个与您的身份池关联的默认角色 - 一个用于未经身份验证的用户，另一个用于经过身份验证的用户。这些默认角色会向 Cognito Sync 和 Mobile Analytics 提供身份池访问权限。

下一页将显示一段代码，该段代码用于创建凭证提供程序，以便您可以轻松地将 Cognito Identity 与 Unity 应用程序集成。您可以将凭证提供商对象传递给所使用的 AWS 客户端的构造函数。代码如下所示：

```
CognitoAWSCredentials credentials = new CognitoAWSCredentials (
    "IDENTITY_POOL_ID", // Identity Pool ID
    RegionEndpoint.USEast1 // Region
);
```

## 后续步骤
<a name="next-steps"></a>
+  **入门**：阅读[《适用于 Unity 的 AWS Mobile SDK 入门》](getting-started-unity.md)，详细了解该 SDK 中包含的服务。
+  **运行演示**：查看演示常见使用案例的[示例 Unity 应用程序](https://github.com/awslabs/aws-sdk-unity-samples)。要运行示例应用，请按如上所述设置适用于 Unity 的 SDK ，然后按照各个示例的 README 文件中的说明进行操作。
+  **阅读 API 参考**：查看适用于 Unity 的 AWS Mobile SDK 的 [API 参考](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/Index.html)。
+  **提问**：在 [AWS Mobile SDK 论坛](https://forums.aws.amazon.com/forum.jspa?forumID=88)上发布问题，或者[在 Github 上提出问题](https://github.com/aws/aws-sdk-unity/issues)。