# CCD と Addressables のウォークスルー

> Follow this workflow to integrate the Addressable Asset system with Cloud Content Delivery for seamless content delivery.

このセクションでは、実際の Unity ゲームプロジェクトに Cloud Content Delivery (CCD) と [Addressables](https://docs.unity3d.com/Packages/com.unity.addressables@latest/) を設定して、Unity エディターから CCD にアセットのパイプラインを簡単に統合できるようにする方法を示します。

> **Note:**
>
> Addressable Asset System は、CCD を使用するために必須ではありません。

Loady Dungeons という非常にシンプルなモバイルゲームを使用して、以下を行う方法を学びます。

* [Addressable Assets パッケージを使用してアセットを設定および管理する](#configuring-game-assets-as-addressable)
* [アセットバンドルを生成する](#generate-assetbundles)
* [Unity Dashboard でプロジェクトを設定する](#get-started-with-cloud-content-delivery)
* [コマンドラインインターフェースを設定する](#the-command-line-interface-optional)
* [CCD ダッシュボードでバケットとバッジを作成する](#buckets)
* [アセットバンドルをアップロードする](#uploading-the-content)

このウォークスルーを読めば、ユーザーに効果的にコンテンツを提供する方法と、Unity の Addressable Asset System と CCD を一緒に使用する方法を理解できます。

> **Note:**
>
> このウォークスルーでは、Unity 2021.3.18f1 を使用します。

## プロジェクトをダウンロードする##prerequisites

このウォークスルーを進めるために最初に行う必要があるのは、GitHub からサンプルゲーム [Loady Dungeons](https://github.com/UnityTechnologies/LoadyDungeons/releases/tag/t0.2.0) の最新バージョンをダウンロードすることです。

## プロジェクトをテストする##configure-addressables-in-the-editor

1. Unity エディターを開きます。

2. Loady Dungeons プロジェクトを開きます。

3. MainMenu シーンを開きます。

4. Game (ゲーム) タブをクリックします。

5. Aspect (アスペクト) ドロップダウンで、**+** をクリックします。

   1. **Type** (タイプ) が "Aspect Ratio" (アスペクト比)、**Width** (幅) と **Height** (高さ) がそれぞれ 9 と 16 の新しいアスペクトを作成します。これにより、ゲームのプレビューが携帯電話で実行したときの外観に近くなります。
   2. **OK** をクリックします。
   3. **Low Resolution Aspect Ratios** (低解像度のアスペクト比) をオフにします。

6. エディターの **再生** ボタンを押して、ゲームを試します。

> **Note:**
>
> 初期状態でゲームをプレイすると、最初のレベルをロードできません。このウォークスルーを進める過程で、CCD と Addressables を使用するために必要なアセットを関連付けることで、この制限が修正されます。

## Addressable Assets パッケージをインストールする##connect-your-project-to-ccd

アセットを Addressable としてマークするには、Unity エディターで直接 Addressables パッケージをインストールする必要があります。

> **Note:**
>
> このプロジェクトにはすでに Addressables パッケージがプリインストールされていますが、カスタムプロジェクトを進める場合や、検証済みのより新しいバージョンにアップグレードしたい場合は、[Package Manager](https://docs.unity3d.com/Manual/upm-ui.html) (パッケージマネージャー) から Addressables パッケージをインストールしてください。

1. **Window** (ウィンドウ) > **Package Manager** (パッケージマネージャー) を選択します。
2. 使用している Unity エディターで検証済みの最新バージョンの Addressables を探します。この例では、バージョン 1.16.19 を使用します。
3. 必要なバージョンを選択し、**Install** (インストール) を選択します。

## ゲームアセットを Addressable として設定する##configuring-game-assets-as-addressable

[Addressable アセット](https://docs.unity3d.com/Packages/com.unity.addressables@latest/) は、アドレスでアセットをロードすることにより、アセット管理の負担を軽減する簡単な方法を提供します。Addressables パッケージをインストールしたので、次はゲームアセットを Addressable としてマークします。

1. Project (プロジェクト) ウィンドウで Scenes (シーン) フォルダーを開きます。

2. 以下のアセットを選択します。

   * Level\_00
   * Level\_01
   * Level\_02
   * Level\_03

3. Inspector ウィンドウで、それぞれに対して **Addressable** を選択します。

4. **Window** (ウィンドウ) > **Asset Management** (アセット管理) > **Addressables** > **Groups** (グループ) から Addressables Groups (Addressables グループ) ウィンドウを開きます。

5. **Create** (作成) > **Group** (グループ) > **Packed Assets** (パックされたアセット) を使用して、以下のグループを新規作成します。

   * Level 00
   * Level 01
   * Level 02
   * Level 03
   * Hats

6. Scenes (シーン) のアセットを、デフォルトグループからそれぞれの対応するグループにドラッグします。例えば、Level\_01 シーンを、デフォルトグループから新規作成した Level 01 グループにドラッグします。

7. Hats フォルダーの (フォルダー自体ではなく) コンテンツ全体を、Project (プロジェクト) ウィンドウの Hats フォルダー (**Prefabs** (プレハブ) > **Hats**) から Hats グループにドラッグします。

8. Addressables Groups (Addressables ウィンドウ) から各アセットを選択し、その長い Addressable フィールドの名前を Inspector ウィンドウ内でより単純な名前に変更します。すべてのアセットを選択し、**右クリック** > **Simplify Addressable Names** (Addressable の名前を単純化) を選択すると、それらの名前が自動的に変更されます。

   シーンアセット Level\_00 であれば、Addressable フィールドにあるその名前を Assets/Scenes/Level\_00.unity から Level\_00 に変更します。

   * シーンアセット Level\_00 の Addressable フィールドの名前を Level\_00 に変更
   * シーンアセット Level\_01 の Addressable フィールドの名前を Level\_01 に変更
   * シーンアセット Level\_02 の Addressable フィールドの名前を Level\_02 に変更
   * シーンアセット Level\_03 の Addressable フィールドの名前を Level\_03 に変更
   * プレハブアセット Hat00 の Addressable フィールドの名前を Hat00 に変更
   * プレハブアセット Hat01 の Addressable フィールドの名前を Hat01 に変更
   * プレハブアセット Hat02 の Addressable フィールドの名前を Hat02 に変更
   * プレハブアセット Hat03 の Addressable フィールドの名前を Hat03 に変更

## プロファイルを設定してアセットバンドルをビルドする##generate-assetbundles-and-upload-content-manually

1. この段階では、新しいアドレス指定可能プロファイルを作成し、ゲームの開発に関するすべての関連設定をこの開発プロファイルに保存します。

   1. **Window** (ウィンドウ) > **Asset Management** (アセット管理) > **Addressables** > **Groups** (グループ) をクリックします。
   2. ドロップダウンから **Profile** (プロファイル) > **Manage Profiles** (プロファイルの管理) を選択します。
   3. 表示される Addressables Profiles (アドレス指定可能プロファイル) ウィンドウで、**Create** (作成) > **Profile** (プロファイル) を選択します。
   4. New Profile (新しいプロファイル) という名前のプロファイルが表示されます。それを **右クリック** して、**Rename Profile** (プロファイルの名前を変更) を選択します。“Development Profile” という名前を付けます。

2. **Development Profile** を右クリックし、**Set Active** (アクティブに設定) を選択します。これにより、Development Profile が現在使用中のプロファイルとして設定されます。

3. 次に、ゲームのコード以外のアセットを含むアーカイブファイル、[アセットバンドル](https://docs.unity3d.com/Manual/AssetBundlesIntro.html) をビルドします。これを行うのは、エディターの再生モードで、ローカルアセットの代わりにアセットバンドルを使用するためです。

   1. **Window** (ウィンドウ) > **Asset Management** (アセット管理) > **Addressables** > **Groups** (グループ) をクリックします。
   2. **Build** (ビルド) > **New Build** (新しいビルド) > **Default Build Script** (デフォルトビルドスクリプト) をドロップダウンから選択します。
   3. **Play Mode Script** (再生モードスクリプト) > **Use Existing Build** (既存のビルドを使用) をドロップダウンから選択します。

## CCD の使用を開始する##get-started-with-cloud-content-delivery

これで、このゲームを Cloud Content Delivery (CCD) サービスにフックし、最終的に Addressables とアセットバンドルを利用するための準備ができました。CCD の利点は、アプリケーションの新しいバージョンを再インストールする必要なく、コンテンツをホストし世界中のアプリケーションユーザーに配信するマネージドクラウドサービスであるという点です。

CCD の使用を開始するには、以下を行います。

1. [Unity Dashboard](https://dashboard.unity3d.com/) に移動します。

2. Unity ID を使用してサインインします。

3. Projects (プロジェクト) ドロップダウンから、**Create Project** (プロジェクトを作成) をクリックします。

   1. “Loady Dungeons Workshop” という名前を付けます。
   2. **Create project** (プロジェクトを作成) をクリックします。

4. **Loady Dungeons Workshop** の **Project Settings** (プロジェクト設定、歯車のアイコン) をクリックします。プロジェクト ID をメモします。

5. 左側で、**Environments** (環境) を選択します。

6. まだ開発環境がない場合は作成します。

7. Unity Dashboard のランディングページで、**Cloud Content Delivery** を見つけて選択します。

### コマンドラインインターフェース (任意)##the-command-line-interface-optional

任意のコマンドラインインターフェース (CLI) を使用してプロジェクトを管理する場合は、以下を行います。

1. 使用している OS 用の [CLI をダウンロード](./cli.md#get-started) します。
2. 必ず、CLI のフォルダーをコンピューターの環境変数に加えてください。
3. コマンドラインを開き、プロジェクトのフォルダーに移動します。
4. 以下のコマンドを入力して、CLI が正常に設定されていることを確認します: `ucd help`

[CCD コマンドラインインターフェース (CLI)](./cli.md) を参照してください。

## バケット##buckets

ここでは、このプロジェクトのさまざまな制作段階で役立つバケットを作成します。

### バケットを作成する##create-buckets

1. CCD のランディングページで、左側の **Buckets** (バケット) をクリックします。

2. プロジェクトのドロップダウンから **Loady Dungeons Workshop** を選択します (まだ選択されていない場合)。

3. **Create Bucket** (バケットを作成) をクリックします。

   1. バケットに “Loady Dungeons Sample” という名前を付けます。

   2. バケットの説明 (任意) を入力します。

   3. バケットを以下のどちらにするかを選択します。

      * Open to all (全員に公開): 誰でもこのバケット内のコンテンツを変更することができます。
      * Promotion only (昇格専用): オーナーとマネージャーが、[昇格](./_index.md#release) によってコンテンツを変更できます。誰も、このバケットにコンテンツをアップロードしたり、このバケットからコンテンツを削除したりはできません。

   4. このバケットに対する読み取りアクセスを制限するには、**Enable Bucket Privacy** (バケットのプライバシーを有効化) を選択します。Private バケットでは、アクセストークンを持つユーザーのみがコンテンツを読み取ることができます。

      > **Note:**
      >
      > バケットの作成後にバケットのプライバシー設定を変更することはできません。

   5. **Next** (次へ) を選択します。

   6. 本番環境と開発環境の両方にチェックが付いていることを確認してください。

   7. **Create** (作成) を選択します。

Loady Dungeons Sample バケットが、ダッシュボードの Cloud Content Delivery Buckets (Cloud Content Delivery バケット) ページで、開発環境と本番環境の両方に対して表示されるようになりました。ページ上部の Environments (環境) ドロップダウンを使用すると、環境を切り替えることができます。後でリモートロードパスに使用する必要があるため、両方の環境でバケットのバケット ID をメモします。

## アセットバンドルを生成し、コンテンツを手動でアップロードする##test-your-game

### アセットバンドルを生成する##generate-assetbundles

[アセットバンドル](https://docs.unity3d.com/Manual/AssetBundlesIntro.html) は、Unity が実行時にロードできる、プラットフォーム固有のコード以外のアセットを含むアーカイブファイルです。

アセットバンドルを生成するには、以下を行います。

1. Unity エディターのプロジェクトで、**Window** (ウィンドウ) > **Asset Management** (アセット管理) > **Addressables** > **Groups** (グループ) をクリックします。

2. Profile (プロファイル) ドロップダウンで、**Development Profile** が選択されていることを確認します。選択されていない場合は、ここで選択します。

3. Profile (プロファイル) ドロップダウンで、**Manage Profiles** (プロファイルの管理) を選択します。

4. Development Profile が選択された状態で、以下のように設定します。

   * **RemoteBuildPath**: `AssetBundles/[BuildTarget]`。ここで、`[BuildTarget]` はデフォルトのサブフォルダーです。

   * **RemoteLoadPath**: `https://PROJECT_ID.client-api.unity3dusercontent.com/client_api/v1/buckets/BUCKET_ID/release_by_badge/latest/entry_by_path/content/?path=`

     * `PROJECT_ID` をプロジェクトの ID に置き換えます。プロジェクト ID を前にメモしていなかった場合は、ダッシュボードの隅にあるユーザー名をクリックし、**Account** (アカウント) > **Project Management** (プロジェクト管理) > **Loady Dungeons Workshop** で調べます。
     * パス内の `BUCKET_ID` を、使用するバケット (この例では、開発環境に作成した Loady Dungeons Sample バケット) の ID に置き換えます。その `BUCKET_ID` を前にメモしていなかった場合は、CCD ダッシュボード内のバケットのリストで調べます。
     * パス内の `latest` は、最新のリリースに割り当てられている自動生成されたバッジ [Latest](./_index.md#badge) を指します。

5. Addressables Groups (Addressables グループ) ウィンドウに戻ります。

6. **Hats** を選択します。

7. Inspector パネルで、以下のように設定します。

   1. **Build Path**: RemoteBuildPath
   2. **Load Path**: RemoteLoadPath
   3. Level 00、Level 01、Level 02、Level 03 に対して繰り返します。

   これにより、これらの 4 組のアセットのビルドパスとロードパスが、Development Profile に対して指定したパスに設定されます。

8. 引き続き Addressables Groups (Addressables グループ) ウィンドウで、**Build** (ビルド) ドロップダウンをクリックし、**New Build** (新しいビルド) > **Default Build Script** (デフォルトビルドスクリプト) を選択します。これにより、アセットバンドルが RemoteBuildPath の場所に保存されます。

9. 先ほど作成したビルドをプレイテストのベースとして使用するには、**Play Mode Script** (再生モードスクリプト) > **Use Existing Build** (既存のビルドを使用) をクリックします。

10. Unity エディターの **再生** ボタンをクリックしてゲームをテストします。

    * ゲーム内の **Start** (開始) を押します。ゲームがどのようにスタックしているかに注目してください。

### コンテンツをアップロードする##uploading-the-content

ここでは、このコンテンツを、先ほど CCD に設定した開発バケットにアップロードします。

1. ダッシュボードで、開発環境の Loady Dungeons Sample バケットを選択します。
2. バケットが空の場合は **Upload using the dashboard** (ダッシュボードを使用してアップロード)、バケットにすでにエントリーが含まれている場合は **Upload Content** (コンテンツをアップロード) を選択します。
3. ドラッグアンドドロップするか、**Browse** (参照) ボタンを選択して、アセットバンドルをビルドしたフォルダーから CCD の開発バケットにコンテンツをアップロードします。ファイルは、先ほど RemoteBuildPath として指定したフォルダーにあります。
4. **Upload 5 Files** (5 個のファイルをアップロード) (4 つのレベルと Hats) を選択します。
5. アップロードプロセスが終わったら、**Refresh Page** (ページを更新) を選択して、バケットの情報のステータスを更新します。エントリーは Unreleased Changes (未リリースの変更) として表示されます。これは、エントリーがバケット内に存在するが、まだ [リリース](./_index.md#release) にラップされていないことを意味します。
6. リリースを作成するには、**Create Release** (リリースを作成) を選択します。これにより、開発環境の Loady Dungeons Sample バケットにアップロードしたアセットバンドルが取得され、リリースにバインドされます。画面上のプロンプトに従って、プロセスを完了します。

CCD により、自動作成された `latest` バッジがこのリリースに自動的に適用され、このバケット内に作成された最新のリリースとしてマークされていることに注目してください。

> **Note:**
>
> [CLI を使用してコンテンツをアップロードする](./cli.md) こともできます。

## アセットバンドルを生成し、CCD Management パッケージを使用してコンテンツをアップロードする

CCD Management パッケージと Addressables 1.19.15 以降を併用すると、Addressable コンテンツのビルド、アップロード、リリースが簡単になります。

> **Note:**
>
> Addressables のバージョンをアップグレードし、[Package Manager](https://docs.unity3d.com/Manual/upm-ui.html) から CCD Management パッケージをインストールする必要があります。
>
> 1. **Window** (ウィンドウ) > **Package Manager** (パッケージマネージャー) を選択します。
> 2. Addressables を検索し、バージョン 1.19.15 以上を選択して **Install** (インストール) を選択します。
> 3. CCD Management を検索し、バージョン 2.0.1 以上を選択して **Install** (インストール) を選択します。

### アセットバンドルを生成する##generate-assetbundles2

1. Unity エディターのプロジェクトで、**Window** (ウィンドウ) > **Asset Management** (アセット管理) > **Addressables** > **Groups** (グループ) をクリックします。

2. Profile (プロファイル) ドロップダウンで、**Development Profile** が選択されていることを確認します。

3. Profile (プロファイル) ドロップダウンで、**Manage Profiles** (プロファイルの管理) を選択します。

4. Profile (プロファイル) ウィンドウで、**Development Profile** を選択し、**Remote** (リモート) ドロップダウンを **Cloud Content Delivery** を使用するように変更します。

   > **Note:**
   >
   > この時点でまだ CCD Management パッケージをインストールしていない場合は、追加するよう求めるプロンプトが Unity エディターで表示されます。インストールするには、**Install CCD Management SDK Package** (CCD Management SDK パッケージをインストール) ボタンをクリックします。

   1. 次に表示されるオプションのリストで、先ほど作成した Loady Dungeons Sample バケットを選択します。
   2. その後に表示されるリストで、Latest (最新) バッジを選択します。

5. Addressables Groups (Addressables グループ) ウィンドウに戻ります。

6. **Hats** を選択します。

7. Inspector パネルの **Content Packaging & Loading** (コンテンツのパッケージ化とロード) で、以下を行います。

   1. **Build and Load Paths** (ビルドパスとロードパス) を Remote (リモート) に設定します。
   2. Level 00、Level 01、Level 02、Level 03 に対して繰り返します。

   これにより、これらの 4 組のアセットのビルドパスとロードパスが、Development Profile に対して指定したパスのペアに設定されます。パスのペアの詳細については、[プロファイル](https://docs.unity3d.com/Packages/com.unity.addressables@latest/index.html?subfolder=/manual/AddressableAssetsProfiles.html) を参照してください。

8. Groups (グループ) ウィンドウで、Build (ビルド) ドロップダウンをクリックし、**New Build** (新しいビルド) > **Default Build Script** (デフォルトビルドスクリプト) を選択します。これにより、アセットバンドルが RemoteBuildPath の場所に保存されます。

9. 作成したビルドをプレイテストのベースとして使用するには、**Play Mode Script** (再生モードスクリプト) > **Use Existing Build** (既存のビルドを使用) をクリックします。

10. Unity エディターの **再生** ボタンを選択して、ゲームをテストします。

11. ゲーム内の **Start** (開始) を選択します。ゲームがどのようにスタックしているかに注目してください。

### コンテンツをアップロードする##uploading-the-content2

このコンテンツを、先ほど CCD に設定した Loady Dungeons Sample バケットに生成、アップロード、リリースするには、以下を行います。

1. Unity エディターのプロジェクトで、**Window** (ウィンドウ) > **Asset Management** (アセット管理) > **Addressables** > **Groups** (グループ) をクリックします。
2. **Build & Release** (ビルドとリリース) を選択します。

CCD Management パッケージは、デフォルトのビルドスクリプト動作を使用して Addressable バンドルを生成します。次に、Management パッケージは Loady Dungeons Sample バケットに接続されたパスのペアに関連付けられているすべてのグループと、先ほど設定した最新のバッジをそれらのリモートターゲットにアップロードします。最後に、Management パッケージはそれらのリモートターゲット用のリリースを作成し、それらのバッジを `latest` に更新します。

## リリースを昇格させる

アセットを開発環境の Loady Dungeons Sample バケットにアップロードし、それらのアセットをリリースに結び付けたら、これらの最新の変更を一般公開できます。本番環境にもバケットを作成したのはそのためです。本番環境のバケットには、プレイヤーに公開する準備ができたリリースを入れます。これは、[昇格](./_index.md#buckets) と呼ばれるプロセスによって、開発環境のバケットから本番環境のバケットにリリースを移動することを意味します。

リリースを開発環境のバケットから本番環境のバケットに昇格させるには、以下を行います。

1. まだ行っていない場合は、Unity Dashboard で Loady Dungeons Workshop CCD プロジェクトに移動し、Environments (環境) ドロップダウンで開発環境が選択されていることを確認し、Loady Dungeons Sample バケットを選択します。
2. **Promote Release** (リリースを昇格) を選択します。
3. Target Environment (ターゲット環境) ドロップダウンで、**production** (本番) を選択します。
4. Target Bucket (ターゲットバケット) ドロップダウンで、**Loady Dungeons Sample** を選択します。
5. リリースノート (任意) を追加します。
6. **Next** (次へ) を選択し、画面上のプロンプトに従います。
7. **Promote Release** (リリースを昇格) を選択します。

ここでも、CCD により、自動作成された `latest` バッジがこのリリースに自動的に適用され、このバケット内に作成された最新のリリースとしてマークされていることに注目してください。

ゲームをテストする前に、正しいバケットを指すようにプロファイル変数を変更する必要があります。これを行うには、以下の 2 つの方法があります。

1. 環境ごとに別々のプレイヤービルドを用意します。開発ビルドではデバッグシンボルを利用し、`bucket_id` 変数を開発環境のバケットに設定します。本番ビルドではデバッグシンボルを無効にし、`bucket_id` 変数を本番環境のバケットに設定しますが、どちらのビルドでも同じコンテンツを使用します。
2. プロファイル変数の静的プロパティまたは [TransformInternalId](https://docs.unity3d.com/Packages/com.unity.addressables@latest/index.html?subfolder=/api/UnityEngine.ResourceManagement.ResourceManager.TransformInternalId.html) を使用して、実行時にカタログがリーチするバケットを動的に変更します。Addressables における静的プロファイル変数と内部 ID の変換の詳細については、[リソース URL の変換](https://docs.unity3d.com/Packages/com.unity.addressables@latest/index.html?subfolder=/manual/TransformInternalId.html) に関するドキュメントを参照してください。

ゲームをテストします。

1. Unity エディターで、エディターの **再生** ボタンを押します。
2. ゲーム内で **Start** (開始) を押します。
3. ゲーム内で **Play** (再生) を押します。Unity エディター内でゲームをプレイできるようになりました。

これで、リリースとそのすべてのアセットが開発環境から本番環境に正常に移動され、ユーザーにデプロイする準備ができました。

## Private バケットで Addressables を使用する

Private バケットからデータを読み取るには、有効なバケットアクセストークンが必要です。

Addressables 1.19.4 以降では、[WebRequestOverride](https://docs.unity3d.com/Packages/com.unity.addressables@latest/index.html?subfolder=/api/UnityEngine.AddressableAssets.Addressables.WebRequestOverride.html) 機能を使用して、以下の例に示すようにバケットアクセストークンをリクエストにヘッダーとして追加できます。

```plaintext
void Start()
{
	textComponent = GetComponent<Text>();
	Addressables.WebRequestOverride = webRequest =>
	{
		webRequest.SetRequestHeader("Authorization", "Basic "+token);
		//  Debug.Log($"Fetching: {webRequest.url}");
	};
	Addressables.LoadAssetAsync<TextAsset>("Assets/one.txt").Completed += handle =>
	{
		textComponent.text = handle.Result.text;
		// Debug.Log($"Text is now: {handle.Result.text}");
	};
}
```

この例で、`token` は base64 でエンコードされたバケットアクセストークンの値です。
