Addressables を用いたリモートアセット更新 チュートリアル

はじめに

このチュートリアルでは、UnityのAddressablesシステムを使用して、アセット(Prefabなど)をリモートサーバーから更新・ダウンロードする方法を解説します。これにより、アプリ本体の再ビルドなしで、最新のアセットをユーザーに提供することが可能になります。

前提条件

  • Unity (2019以降推奨)
  • Addressablesパッケージがプロジェクトにインストール済み
  • リモートサーバー(例:Webサーバーやクラウドストレージ)の利用環境

ステップ1: Addressables パッケージの導入

  1. Unity Package Manager を開く
    メニューから 「Window > Package Manager」 を選択します。
  2. Addressables パッケージを検索・インストール
    Unity Registryの検索ボックスに「Addressables」と入力し、最新バージョンをプロジェクトに追加します。

ステップ2: アセットの Addressable 設定

  1. 対象アセットの選択
    プロジェクトウィンドウで、更新対象のPrefab(またはその他のアセット)を選択します。
  2. Addressableにマーク
    Inspector上で「Addressable」チェックボックスをオンにします。
  • デフォルトではアセットの名前がアドレスとして設定されますが、必要に応じて分かりやすい名前に変更してください(例:"MyRemotePrefab")。

ステップ3: リモートホスティング用の Build Path と Load Path の設定

  1. Addressables Groups ウィンドウを開く
    メニューから 「Window > Asset Management > Addressables > Groups」 を選択します。
  2. グループ設定の変更
    リモート配信用にグループの設定を変更します。
  • Build Path:
    例として、[UnityEngine.AddressableAssets.Addressables.BuildPath]/RemoteBuild/
    ※プロジェクトディレクトリ内の指定フォルダにビルドファイルを出力する場合
  • Load Path:
    例として、https://your.server.com/Addressables/RemoteLoad/
    ※アップロードしたファイルを参照するURLに変更してください
  1. 設定の保存
    各グループごとに、設定が正しく反映されていることを確認します。

ステップ4: Addressable コンテンツのビルドとアップロード

  1. コンテンツのビルド
    Addressables Groupsウィンドウ内で右クリックし、「Build > Build Player Content」 を選択します。
    これにより、最新のコンテンツカタログとアセットファイルが、設定したBuild Pathに出力されます。
  2. アップロード
    出力されたフォルダ(例:RemoteBuild)の内容を、リモートサーバー上の対応するフォルダ(例:RemoteLoad)にアップロードします。
  • FTPやクラウドストレージの管理ツールなど、普段利用している手法でアップロードしてください。

ステップ5: ランタイムでのリモートカタログ更新とアセット読み込み

  1. ランタイムでのカタログ更新コードの実装
    アプリ起動時に最新のカタログを確認し、更新があればリモートからダウンロードするコードを作成します。
    以下はサンプルコードです。
   using UnityEngine;
   using UnityEngine.AddressableAssets;
   using UnityEngine.ResourceManagement.AsyncOperations;
   using System.Collections;

   public class RemoteAssetUpdater : MonoBehaviour
   {
       // 更新後に読み込みたいPrefabのアドレス(例:"MyRemotePrefab")
       public string prefabAddress;

       void Start()
       {
           // カタログ更新の確認と更新
           StartCoroutine(UpdateCatalogAndLoadAsset());
       }

       IEnumerator UpdateCatalogAndLoadAsset()
       {
           // カタログの更新があるか確認する
           AsyncOperationHandle<IList<string>> checkHandle = Addressables.CheckForCatalogUpdates();
           yield return checkHandle;

           IList<string> catalogsToUpdate = checkHandle.Result;

           if(catalogsToUpdate != null && catalogsToUpdate.Count > 0)
           {
               // 更新が必要なカタログを更新する
               AsyncOperationHandle updateHandle = Addressables.UpdateCatalogs(catalogsToUpdate);
               yield return updateHandle;
           }

           // 更新後、Prefabを非同期で読み込む
           AsyncOperationHandle<GameObject> loadHandle = Addressables.LoadAssetAsync<GameObject>(prefabAddress);
           yield return loadHandle;

           if(loadHandle.Status == AsyncOperationStatus.Succeeded)
           {
               // 読み込み成功したらPrefabをシーンに生成
               Instantiate(loadHandle.Result, Vector3.zero, Quaternion.identity);
           }
           else
           {
               Debug.LogError("Prefabの読み込みに失敗しました");
           }
       }
   }
  1. スクリプトの適用
    シーン内に空のGameObjectを作成し、上記の RemoteAssetUpdater スクリプトをアタッチします。
    Inspector上の prefabAddress に、設定したアドレス(例:"MyRemotePrefab")を入力してください。

ステップ6: 動作確認

  1. エディタまたはビルド環境でテスト
    • リモートサーバーにアップロードしたカタログとアセットを参照できるよう、ネットワーク環境が整っているか確認してください。
    • シーンを再生して、最新のカタログが取得され、リモートからPrefabがダウンロード・生成されることを確認します。
  2. ローカルキャッシュの確認とクリア(必要に応じて)
    Addressablesは一度ダウンロードしたアセットをキャッシュします。テスト時にキャッシュをクリアする場合は、Addressables.ClearDependencyCacheAsync() を利用してください。

まとめ

このチュートリアルでは、以下の流れでリモートアセット更新を実現する方法を解説しました。

  1. Addressablesパッケージの導入
  2. アセット(Prefab)をAddressableとして設定
  3. リモートホスティング用の Build Path と Load Path の設定
  4. Addressableコンテンツのビルドとリモートサーバーへのアップロード
  5. ランタイムでのカタログ更新とアセット読み込みの実装
  6. 動作確認とキャッシュ管理

これにより、アプリ本体を再ビルドすることなく、リモートから最新アセットを取得し、柔軟にコンテンツを更新する運用が可能になります。ぜひ、実際にプロジェクトで試しながら、Addressablesの柔軟なアセット更新機能を体験してください。

Addressable,Unity

Posted by hidepon