コンテンツのリモート配布
コンテンツのリモート配布により、アプリケーションの初回のダウンロードサイズとインストール時間を削減できます。また、リモート配布したアセットを、アプリケーションまたはゲームを再公開せずに更新することもできます。
グループのロードパスとしてリモート URL を割り当てると、Addressables システムは、グループ内のアセットをその URL からロードします。Build Remote Catalog (リモートカタログのビルド) オプションを有効にすると、Addressables は、リモートアセットのアドレスをリモートカタログから参照します。これにより、ゲームまたはアプリケーション全体の更新と再インストールをユーザーに強制せずに、アセットに変更を加えることができます。
[リモート配布を有効] にしたら、以下の 2 通りの方法でコンテンツをビルドできます。
- New Build > Default Build Script を使用したフル [コンテンツビルド]: すべてのコンテンツバンドルとカタログをビルドします。完全なアプリケーションの公開または更新を準備するときは、プレイヤーを再ビルドする前に必ずフルビルドを実行してください。
- Update a Previous Build スクリプトを使用した [コンテンツ更新ビルド]: すべてのコンテンツバンドルとカタログをビルドしますが、インストール済みのアプリケーションでは変更されたバンドルをダウンロードするだけで済むように、リモートカタログを設定します。更新をビルドする前に、Check for Content Update Restrictions ツールを実行して、変更の特定とグループの準備を行ってください。
フルビルドまたは更新をビルドした後は、リモートカタログ、カタログハッシュファイル、およびリモートバンドルをホスティングサービスにアップロードする必要があります。
リモートコンテンツの開発、テスト、公開に役立つ Addressables プロファイルの設定に関するヒントについては、[開発に役立つプロファイルの使用] を参照してください。
リモート配布の有効化
コンテンツのリモート配布を有効にするには、リモートカタログを有効にし、リモートでホストするアセットを含むグループを設定します。
リモートカタログの有効化
Addressable Asset Settings インスペクター (メニュー: Window > Asset Management > Addressables > Settings) で、リモートカタログを有効にします。
- Build Remote Catalog: オン
- Build & Load Paths: Remote
リモートカタログの有効化
カタログとそれに伴うハッシュファイルは、Build Path 設定で指定されたフォルダーにビルドされます。これらのファイルを、Load Path 設定で指定された URL でアクセスできるようにアップロードする必要があります。特に理由がない限り、カタログがリモートバンドルと同じパスにビルドされ、同じパスからロードされるように、Remote の場所を使用してください。
リモートグループの設定
グループ内のアセットがリモートでホストされるようにグループを設定するには、Build & Load Paths を Remote の場所に設定します。
アプリケーションのフルビルドを再度公開する合間に、コンテンツ更新を公開することを予定している場合は、グループ内のコンテンツを更新しようとしている頻度に従って Update Restriction の値を設定します。
サイズの大きいバンドルを作成するグループに対しては、グループ内のアセットのほとんどを変更する予定がなければ特に、Cannot Change Post Release を選択します。これを設定したグループ内のアセットを変更すると、変更されたアセットが、Addressables ツールによって更新用の新しいグループに移動されます。インストール済みのアプリケーションでは、新しいバンドルだけがダウンロードされます。
頻繁な変更が想定されるアセットを含むグループに対しては、Can Change Post Release を選択します。これを設定したグループ内のアセットを変更すると、それらのアセットを含むバンドル全体が再ビルドされ、インストール済みのアプリケーションに再ダウンロードされます。更新後にダウンロードが必要になるデータの量を減らすには、これを設定したグループで作成されるバンドルのサイズが、可能な限り小さくなるようにします。
リモートコンテンツの更新の詳細については、[コンテンツ更新ビルド] を参照してください。
Advanced Options セクションには、リモートホスティングとダウンロードに影響するいくつかのオプションがあります (ただし、リモートホスティングを有効にするために必要なわけではありません)。詳細については、[詳細オプション] を参照してください。
開発に役立つプロファイルの使用
[プロファイル] は、ローカルとリモートの両方のコンテンツのビルドパスとロードパスを設定するために使用できる変数を定義します。
コンテンツをリモート配布するときは、通常、ビルドの目的に応じて、リモートコンテンツ用にさまざまな URL (ロードパス) を設定する必要があります。このような状況の例を以下に示します。
一般的なゲームプレイと機能をテストするためのビルド
開発の初期段階や、ホストにアクセスせずにテストする必要があるときは、すべてのコンテンツをローカルコンテンツとして扱うと便利な場合があります。このような場合は、Built-In の場所を使用して、Local および Remote プロファイル変数を設定します。
すべてのコンテンツをローカルとして扱う
ローカルホスティングのためのビルド
その後、ローカルネットワーク (または localhost) にホストを設定する段階になったときは、リモートグループのロードパスを変更して、ホストの URL を反映させる必要があります。例えば、[エディターホスティング] を使用する場合は、Editor Hosting (エディターホスティング) の場所を使用して Remote プロファイル変数を設定します。
エディターホスティングによってリモートコンテンツを提供する
CDN のためのビルド
本番環境に近づくにつれて、ステージングサーバーを使用し、さらに本番環境のコンテンツデリバリネットワーク (CDN) を使用する場合があります。例えば、Cloud Content Delivery を使用する場合は、Cloud Content Delivery の場所を使用して Remote プロファイル変数を設定します。
Unity Cloud Content Delivery サービスでリモートコンテンツをホストする
その他
リリース後でも、ベータテストやその他の目的のために、異なるホスト URL を使用することが必要になる場合があります。
このような場合、ビルドのたびにビルドパスとロードパスを手動で設定するのではなく、別々のプロファイルを作成し、目的に応じて変数を設定することができます。これにより、コンテンツビルドの作成前に簡単にプロファイルを切り替えることができ、パスの設定を間違える心配もなくなります。
スクリプトを使用してコンテンツビルドを開始する場合は、Addressables API を使用して、ビルド固有のプロファイルを選択することができます。[スクリプトからの Addressables ビルドの開始] を参照してください。
複雑な URL を使用している場合は、プロファイル変数の中で、ビルド時やランタイム時に評価される静的なフィールドまたはプロパティを参照できます。例えば、CCD ProjectID を文字列で入力するのではなく、静的プロパティとして情報を提供するエディタークラスを作成し、それを [CCDInfo.ProjectID] として参照することができます。詳細については、[プロファイル変数の構文] を参照してください (複雑な URL の要件を処理する他の方法として、InternalIdTransformFunc 関数も用意されています)。
Note
リモート URL を静的文字列として表現できない場合は、[カスタム URL の評価] を参照して、アセットや AssetBundle の URL をランタイム時に書き換える方法を確認してください。
AssetBundle のキャッシング
デフォルトでは、Addressables ビルド用に作成された AssetBundle は、ダウンロードされた後にクライアントデバイス上にキャッシュされます。キャッシュされたバンドルは、そのバンドルが更新された場合、またはキャッシュから削除された場合にのみ再ダウンロードされます。
更新されたカタログでは、古いバージョンのカタログに存在していたバンドルエントリーが除外される場合があります。これらのエントリーがキャッシュされている場合、それらのデータはデバイス上で不要になります。
不要なキャッシュデータがデバイスにある場合は、以下の 3 つのオプションのいずれかを選択できます。
- バンドルキャッシュ全体を削除するには、Caching.ClearCache を使用します。
- どの時点でも参照されなくなったキャッシュエントリーを削除するには、Addressables.CleanBundleCache を使用します。この関数は、通常、Addressables の初期化の後 ([Addressables の初期化のカスタマイズ] を参照)、または追加のカタログをロードした後 ([ランタイムでのカタログの管理] を参照) に呼び出します。
- カタログの更新後に自動的に Addressables.CleanBundleCache を呼び出すには、Addressables.UpdateCatalogs の
autoCleanBundleCache
パラメーターを使用します。スクリプトの例については、[ランタイム時のコンテンツ更新の確認] を参照してください。
グループのキャッシングを無効にした場合、そのグループ用に作成されたリモートバンドルは、ダウンロードされるとメモリに格納され、アンロードされるかアプリケーションが終了するまで保持されます。そのバンドルが次回アプリケーションでロードされるときは、Addressables によって再びダウンロードされます。
グループによって作成されたバンドルがキャッシュされるかどうかは、グループのインスペクターの Advanced Options にある Use Asset Bundle Cache 設定で制御できます。
AssetBundle のキャッシングの詳細については、[アセットバンドルの圧縮] を参照してください。Addressables システムは、グループ設定に基づいて、Addressable バンドルをダウンロードするために使用する UnityWebRequests のキャッシュ関連パラメーターを設定します。
WebGL AssetBundle には、いくつかの制限があることに注意してください。詳細については、[WebGL プロジェクトのビルドと実行] を参照してください。
リモートコンテンツの事前ダウンロード
コンテンツを事前にダウンロードしてディスクにキャッシュし、アプリケーションで必要になったときにすばやくアクセスできるようにする場合は、Addressables.DownloadDependenciesAsync メソッドを使用できます。このメソッドにより、Addressable エンティティとあらゆる依存関係がバックグラウンドタスクとしてダウンロードされます。
Addressables.DownloadDependenciesAsync メソッドを呼び出すと、指定したアドレスまたはラベル (通常は AssetBundle) の依存関係がロードされます。
この呼び出しで返される AsyncOperationHandle 構造体には PercentComplete 属性が含まれています。これを使用して、ダウンロードの進行状況の監視と表示を行うことができます。また、コンテンツがロードされるまでアプリケーションを待機させることもできます。
PercentComplete について
PercentComplete では、1 つの AsyncOperationHandle で処理される基盤の操作に関していくつかの側面が考慮されます。状況によっては、実際にしても見かけ上にしても、進行速度が一定にならない場合があります。これは、所要時間の短い操作に、所要時間の長い操作と同じ重みが付けられていることが原因である可能性があります。
例えば、ダウンロードに時間がかかり、依存関係としてローカルバンドルに依存しているアセットがあるとします。このアセットをリモートの場所からロードしようとすると、続行する前に PercentComplete が 50% に急増します。これは、ローカルバンドルのロードが、リモートバンドルよりはるかに短時間で完了するためです。しかし、システムでは、2 つの操作を完了する必要があること以外は認識されていません。
ダウンロード前にユーザーに同意を求める場合、指定したアドレスまたはラベルからコンテンツをダウンロードするために必要な空き容量を取得するには、Addressables.GetDownloadSize を使用します。この操作では、以前にダウンロードされて Unity の AssetBundle キャッシュに入っているバンドルが考慮されます。
アプリケーション用のアセットを事前にダウンロードすることにメリットがある可能性はありますが、そうしない方がよい場合もあります。以下に例を示します。
- アプリケーションに大量のオンラインコンテンツがあり、通常、ユーザーが操作するのはその一部のみであると想定される場合。
- アプリケーションが機能するには、オンラインで接続する必要がある場合。アプリケーションのすべてのコンテンツが、サイズの小さいバンドルに入っている場合は、必要に応じてコンテンツをダウンロードする方がよい場合があります。
完了した割合の値を使用してコンテンツがロードされるまで待つのではなく、事前ロード機能を使用すると、ダウンロードが開始されたことを表示して、そのまま動作を続けることができます。この実装では、アセットが必要になるまでにロードが終了しなかった場合に対応するためのロード画面または待機画面が必要です。
カスタム URL の評価
いくつかのシナリオでは、アセット (通常は AssetBundle) のパスまたは URL をランタイム時にカスタマイズすることが必要になる場合があります。最もよくある例は、署名付き URL を作成する場合です。また、ホストの動的決定もこの例の 1 つです。
詳細については、[ID 変換関数] を参照してください。