# 通过 CCD 缩减应用程序大小

> Reduce your initial application size by delivering game content through Cloud Content Delivery after players install the app.

为了吸引玩家下载您的游戏，一个好的做法是提供较小的应用程序初始大小，然后让玩家稍后根据需要下载新关卡和资源的文件。

本节使用一个示例项目来引导您将 CCD 和 Addressables 结合使用以缩减应用程序的大小。

## 缩减应用程序大小的过程摘要##reduce-application-size-summary

缩减应用程序大小的过程摘要如下。每个步骤都将在本文档的后面部分展开。

1. 安装 Addressables 和 CCD Management 包。
2. 在 CCD 中配置一个存储桶。
3. 为游戏创建一个新场景，或使用要通过 CCD 发送的现有关卡。
4. 在 Unity 编辑器中配置您的资源。
5. 设置脚本通过 Addressables 调用内容。
6. 将新资源发布到 CCD Dashboard（CCD 后台）。

为了完成这些步骤，需要满足以下条件：

* Unity 编辑器 2019.4 或更高版本
* Addressables（最新版本；此示例使用版本 1.19.15）
* CCD Management（最新版本；此示例使用版本 2.0.1）

## 安装所需的包##install-required-packages

首先，确保您已安装所需的 Addressables 和 CCD Management 包。

1. 在 Unity 编辑器中，选择 **Window（窗口）**> **Package Manager（包管理器）**。
2. 搜索 Addressables，选择版本 1.19.15+，然后选择 **Install（安装）**。
3. 搜索 CCD Management，选择版本 2.0.1+，然后选择 **Install（安装）**。

## 在 CCD 中配置一个存储桶##configure-a-bucket-in-ccd

在 Unity Gaming Services Dashboard（Unity 游戏服务后台）中创建和配置存储桶的步骤如下。

1. 按照 [CCD Dashboard（CCD 后台）](./dashboard.md)的说明操作以访问 CCD 中的存储桶。

2. 按照[存储桶](./dashboard.md#buckets)的说明操作以创建存储桶。

   1. 确保将 **Bucket write conditions（存储桶写入条件）** 设置为 **Open to all（向所有人开放）**。
   2. 选择 **Environment（环境）** 时，将其设置为 **Production（生产）**。

3. 选择 **Create（创建）** 以创建存储桶。

4. 从存储桶列表中选择该存储桶。

5. 选择 **Upload Content（上传内容）**，然后从计算机上传任何文件。

   > **Note:**
   >
   > 此步骤仅用于创建和获取存储桶的 URL。创建初始发布版本后，即可删除该文件。

6. 刷新页面，然后[创建发布版本](./dashboard.md#releases)。

7. 从 Releases（发布版本）选项卡中选择该发布版本。

8. 选择 Addressable Remote Path URLs（Addressable 远程路径 URL）选项卡。

9. 复制“Badge: Latest（标示：最新）”URL 供稍后在 Unity 编辑器中使用。\\


   **Frame:**
   ![](/api/media?file=/ccd/media/images/ccd-app-size-configure-bucket.png)

## 配置 Unity 编辑器##configure-the-unity-editor

在 Unity 编辑器中进行以下设置以便继续执行缩减应用程序大小的过程。

1. 转到 **Window（窗口）**> **Asset Management（资源管理）**> **Addressables** > **Groups（组）**。
2. 如果您以前未使用过可寻址资源 (Addressable Assets)，必须选择 **Create Addressables Settings（创建 Addressables 设置）**。\\


   **Frame:**
   ![](/api/media?file=/ccd/media/images/ccd-app-size-configure-editor-1.png)
3. 在 Addressables Groups（Addressables 组）窗口中选择 **Profile（配置文件）**> **Manage Profiles（管理配置文件）**。
4. 选择 Default（默认）配置文件。
5. 将 **Remote（远程）** 设置为 **Custom（自定义）**。
6. 展开 Remote（远程）字段，并将 **Remote.LoadPath** 设置为先前保存的 URL。\\


   **Frame:**
   ![](/api/media?file=/ccd/media/images/ccd-app-size-configure-editor-2.png)
7. 在 Unity 编辑器主窗口中，选择 **Window（窗口）**> **Asset Management（资源管理）**> **Addressables** > **Settings（设置）**。
8. 启用 **Build Remote Catalog（构建远程目录）**。
9. 将 **Build & Load Paths（构建和加载路径）** 设置为 **Remote（远程）**。\\


   **Frame:**
   ![](/api/media?file=/ccd/media/images/ccd-app-size-configure-editor-3.png)

## 准备场景##prepare-the-scenes

接下来，准备一个或多个场景以通过 CCD 进行加载。确保您至少有一个不同于初始关卡的场景。

> **Note:**
>
> 创建场景的过程超出了此用例的范畴。请参阅 [Unity 手册：场景](https://docs.unity3d.com/Manual/CreatingScenes.html)文档了解更多信息。

1. 在 Unity 编辑器 Project（项目）选项卡的资源中找到您的场景。

2. 在 Inspector（检视面板）选项卡中，启用 **Addressable（可寻址）**。\\


   **Frame:**
   ![](/api/media?file=/ccd/media/images/ccd-app-size-prepare-1.png)

\
或者，将场景从 Project（项目）选项卡拖动到 Addressables Groups（Addressables 组）选项卡的 Default Local Group（默认本地组）中。\\


**Frame:**
![](/api/media?file=/ccd/media/images/ccd-app-size-prepare-2.png)

3. 在 Addressables Groups（Addressables 组）选项卡中，右键单击该资源，然后选择 **Simplify Addressable Names（简化可寻址资源名称）** 以便于阅读。

4. 选择 Default Local Group（默认本地组）。

5. 在 Inspector（检视面板）中：

   1. 将 **Build & Load Paths（构建和加载路径）** 设置为 **\<custom>**。
   2. 将 **Build Path（构建路径）** 设置为 **RemoteBuildPath**。
   3. 将 **Load Path（加载路径）** 设置为 **RemoteLoadPath**。

6. 返回 Addressables Groups（Addressables 组）窗口，选择 **Build（构建）**> **New Build（新建构建）**> **Default Build Script（默认构建脚本）**。

   > **Note:**
   >
   > 如果以前运行过构建，则可以选择 **Build（构建）**> **Update a Previous Build（更新以前的构建）**，然后选择该构建的 .bin 文件来更新构建。

## 比较构建（可选）##compare-builds-optional

在此可选步骤中，一次使用场景来构建应用程序，另一次不使用场景来构建应用程序，然后比较两次构建的大小。在此测试应用程序中，大约有 30 MB 的大小差异。在具有更多关卡和资源的大型应用程序中，节省的大小会更大。

| ![](/api/media?file=/ccd/media/images/ccd-app-size-compare-1.png) | ![](/api/media?file=/ccd/media/images/ccd-app-size-compare-2.png) |
| ----------------------------------------------------------------- | ----------------------------------------------------------------- |
| 包含场景和资源的发布版本的大小（左）与不包含场景的发布版本的大小（右）。                              |                                                                   |

## 配置脚本##configure-your-script

在主场景（与项目一起构建的场景）中，确保添加用于加载下一个关卡的游戏按钮或事件。

> **Note:**
>
> 为避免冲突，请务必从构建中排除通过 CCD 发送的任何场景。

您可以将以下示例脚本附加到游戏中的按钮。请务必在 Inspector（检视面板）中填写可寻址资源名称（在本例中为 sceneName）。

*C#*

```cs
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.SceneManagement;
using UnityEngine.AddressableAssets;
 
public class LoadSceneCCD : MonoBehaviour
{
    public string sceneName = "";
 
    public void LoadTargetScene()
    {
        Addressables.LoadSceneAsync(sceneName, UnityEngine.SceneManagement.LoadSceneMode.Single, true);
    }
}
```

## 准备 AssetBundle 以便上传到后台##prepare-assetbundle-for-dashboard-upload

按照以下步骤准备要上传到后台的场景资源：

1. 在 Unity 编辑器中，选择 **Window（窗口）**> **Asset Management（资源管理）**> **Addressables** > **Groups（组）**。
2. 选择 **Build（构建）**> **New Build（新建构建）**> **Default Build Script（默认构建脚本）**。
3. 构建完成后，在本地驱动器上转到项目文件夹，然后转到 `ServerData\StandaloneWindows64`。请注意，此文件夹可能因构建的目标平台而异。
4. 记下以 .hash 和 .bundle 结尾的文件。

## 上传到后台##upload-to-the-dashboard

上传您在最近构建的 .hash 和 .bundle 文件（在上一步中生成）。如果这是第一次上传，请选择并上传所有文件。

1. 返回 [CCD Dashboard（CCD 后台）](./dashboard.md)的存储桶页面。
2. 选择您创建的存储桶。
3. 在 Latest（最新）选项卡的 Entries（条目）下，选择 Upload Content（上传内容）选项卡。\\


   **Frame:**
   ![](/api/media?file=/ccd/media/images/ccd-app-size-upload.png)
4. 浏览并选择在上一步中构建的文件。
5. 选择 **Upload Files（上传文件）**。
6. 上传完成后，选择 **Refresh Page（刷新页面）**。
7. 选择 **Create Release（创建发布版本）**，为新内容应用 Latest（最新）标示。

## 测试构建##test-your-build

您可以单击会触发加载 CCD 场景的按钮或操作来测试您的构建。如果一切顺利，您的 CCD 场景应该在一小段延时后加载。您的构建应该只包含主场景，不包含要通过 CCD 加载的关卡，否则不会缩减应用程序的大小。
