Addressables:計画とベストプラクティス

今日のゲームはかつてないほど巨大です。最新のデバイスハードウェアの限界を探り続ける中で、ランタイム時にコンテンツを効率的に管理することが開発者にとってますます重要になっています。また、パブリッシャーがゲームのリテンション指標と収益化指標の最適化を模索する中で、小規模なゲームクライアントと動的な無線コンテンツ更新は、多くの成功を収めるゲームのベースライン要件となっています。
Unity は、開発者やパブリッシャーが今日のゲーム市場で成功を収めるのを支援するエンドツーエンドのパイプラインを提供します。このパイプラインは、2019 年にローンチされ、現在は何千もの成功したライブゲームと数万以上の開発に使用されている Unity パッケージ、Addressables から始まります。
Addressables パッケージは、アセットバンドルに組み込み、実行時に動的にロードおよびアンロードされる Unity アセットを整理するためのユーザーインターフェース(UI)と API を提供します。アセットバンドルがベースゲームに同梱されている場合でも、Cloud Content Deliveryのようなリモートコンテンツ配信ネットワーク(CDN)からホストされて配信される場合でも、Addressablesは必要なアセットを必要なときだけロードするのに役立ちます。
Addressables システムは、コンテンツ管理の多くの側面を簡素化できますが、「一度設定すれば後回し」の機能ではありません。Addressable アセットの整理、ビルド、ロード、アンロードの方法に関する選択は、ゲームのサイズとパフォーマンスに大きな影響を与えます。
このガイドでは、Addressables システムを最大限に活用するために考慮すべき最も重要な要素をいくつか紹介します。このブログの最後には、Addressables の一般的なユースケースに基づいた一般的な設定と戦略の推奨事項を提供する便利な「チートシート」があります。
もちろん、最善の戦略は構築するゲームと目標によって異なります。このガイドは、Unity Learn の資料、Unity マニュアルのドキュメント、およびコミュニティ主導の Addressables フォーラムと一緒に使用するリファレンスとして扱います。
Addressables はその中核をなす、アセットバンドルを構築して操作するためのツールです。Addressables の UI と API について説明する前に、アセットバンドルのアーカイブファイル形式とランタイムへの影響について理解しておくことが重要です。
アセットバンドルはコンテナーと考えることができます。アセットバンドルとは、モデル、テクスチャ、プレハブ、ScriptableObject、オーディオクリップ、さらには Unity が実行時に読み込むことができるシーン全体などのアセットを含む、ターゲットプラットフォーム用に構築されたアーカイブファイルです。
アセットバンドルの主な機能は、相互の依存関係を表現できることです。例えば、アセットバンドル 1 には、アセットバンドル 2 のテクスチャに依存するプレハブが含まれている場合があります。Addressables を使用して実行時にプレハブを読み込むと、Addressables システムは自動的にアセットバンドル 2 と依存テクスチャをメモリに読み込みます。また、アセットバンドル 1 にアセットバンドル 3 のアセットに依存する別のアセットがある場合、アセットバンドル 3 もメモリにロードされ、同様にロードされます。

ゲームが実行されると、Addressables システムは、上で説明したテクスチャのような依存アセットを含むすべてのアセットのアクティブな参照を追跡し、どのアセットをメモリに格納する必要があるかを判断します。アセットバンドルからロードされたアセットは、その参照カウントと他のすべてのアセット参照カウントが 0 になるまでメモリから解放できません。アセットバンドル自体は、アセットバンドル内のすべてのアセット参照カウントが 0 の場合にのみメモリから解放できます。
Addressables とアセットバンドルのこの緊密な関係を念頭に置き、Addressables コンテンツを整理する際に最も重要なルールは、一緒にロードおよびアンロードされるアセットの個別のセットを含むアセットバンドルを作成することです。
Addressables を使用する際に最も重要な決定は、アセットを Addressables グループにまとめる方法です。考慮すべき質問をいくつか紹介します。
- 多数の小グループを作成するか、少数の大グループを作成するか。
- グループごとに、いくつのアセットバンドルを生成するべきか(つまり、そのグループのアセットを、別々に、またはラベルごとにまとめてパックするか)
- ラベルを使うべきか?
- グループにローカルまたはリモートのロードパスを与えるべきか
Addressables の最適なグループ化戦略は、ゲーム固有のいくつかの要因によって異なります。
覚えておいてください:Addressables グループは、Addressable アセットの組織構造を提供し、アセットバンドルへの組み込み方法を決定します。そのため、最善の組織戦略は、ゲーム独自の構造、目標、制限に基づいてアセットバンドルを最も効果的にパッキング、ロード、アンロードすることです。
Addressables コンテンツの整理を始める前に、以下のことを確実に把握してください。
1.ゲームの構造とロードマップ
2.ゲームのプラットフォームの強みと制限
3.Addressables を使用してゲームのパフォーマンスを最適化する主な目標
以下、これらの要素それぞれについてご説明します。
最初に考慮すべき要素は、ゲームの構造とロードマップです。
「構造」とは、ゲームの実際のアーキテクチャのことです。ゲームは、プレイヤーが予測可能なレベルや環境のセットを進んでいく直線的なシングルプレイヤージャーニーですか?予測できないタイミングでインスタンス化される可能性のある、何千もの化粧品があるマルチプラットフォーム PvP ゲームですか?ゲームの構造によって、いつアセットをロードして使用できるようにするか、いつアセットとアセットバンドルをメモリからアンロードできるかが決まります。
一緒にロードする必要があり、一緒にアンロードできるアセットのみを含むアセットバンドルを作成してみてください。ゲームが明確な区切り点を持つ直線的なジャーニーである場合は、Addressables グループを、ゲームの各セクションに関連付けられたコンテンツのより大きなサブセットにまとめることを検討してください。こうすることで、これらのアセットをまとめてロードおよびアンロードできます。
ゲームが非線形で予測が難しい場合は、より小さなアセットバンドルを生成する小規模なグループを選択し、より動的にロードおよびアンロードできるようにします。アセットを素早く見つけてレイアウトを最適化するために、グループには論理的で意味のある名前を使用することを常に心がけましょう。
「ロードマップ」とは、ゲームが時間の経過とともにどのように進化するかを指します。ゲームがプレイヤーにリリースされても、バグ修正やゲームバランスのパッチが時々行われる以外は、ほとんど変更されないのでしょうか。それとも、大規模なクライアントアップデートをプレイヤーにインストールさせずに、定期的に新しいコンテンツを追加することを想定していますか?
コンテンツロードマップは、グループ戦略の情報を得るのに役立ちます。ゲームのコンテンツが自己完結型で、ローンチ後に更新されない場合は、ここまでで説明した構造上の考慮事項を中心にグループ化戦略を練ります。頻繁なコンテンツ更新が必要なゲームの場合は、プレイヤーが必要なときに必要なものをダウンロードできるようにコンテンツをグループ化します。
ラベルは、ゲームが成熟するにつれて成長する外観のアイテムのセットなど、実行時に一緒に必要になる別個のバンドルのコンテンツを識別するのに使用することを検討してください。また、Groups Settings の「Pack Together By Label」バンドルモードを使用して、論理的にグループ化したコンテンツを細分化することもできます。
例えば、プレイヤーが収集できる化粧品アイテムを使った新しい「ハロウィン 2023」イベントを企画するかもしれません。「Halloween 2023 Outfits」グループには、「Hats」、「Shoes」、「Masks」というラベルのアセットが含まれている場合があります。その後、このグループのすべてのアセットに「Halloween 2023」ラベルを追加できます。このグループに「Pack Together By Label」バンドルモードを使用すると、ビルド時に 3 つのアセットバンドルが作成されます。
ランタイム時に、キャラクターカスタマイズ画面で「Hats」というラベルの付いたアドレス可能なアセットをすべてロードすることで、そのラベルの付いたすべてのアセットがダウンロードされ、メモリに読み込まれ、プレイヤーが閲覧できるようになります。または、イベントのプロモーションページに「Halloween 2023」というラベルの付いたすべての Addressable アセットをロードして、プレイヤーに表示できる状態にすることもできます。


ゲームの構造とロードマップを深く理解することで、ゲームのライフサイクル全体にわたって有益なコンテンツ編成について、十分な情報に基づいた意思決定を下すことができます。
次に、プラットフォーム固有の強みと制限、およびそれがコンテンツ戦略にどのような意味を持つかについて説明します。
次に考慮すべき要素は、配布するプラットフォームの強みと制限です。このセクションでは、Addressables ユーザーにとっての共通のプラットフォームターゲットと、それぞれの重要な考慮事項について概説しました。
モバイルと VR
モバイルおよび VR プラットフォームでは、アプリのサイズ、バンドルコンテンツのサイズ、ダウンロード速度を最も重視する必要があります。
グループの場合は、インストール後すぐにプレイヤーに必要となるコンテンツセットを検討してください(例:チュートリアルを完了できるようにするため)。このコンテンツがベースゲームに含まれるように、ローカルロードパスを持つグループにまとめてください。他のすべてのコンテンツをリモートロードパスでグループにまとめ、このコンテンツを無線でプレイヤーに配信できるようにします。
比較的小さなアセットバンドルを構築するグループ戦略を選択します。正確なバランスはゲームによって異なります。極端に大きなバンドルは、かなりの量のメモリを消費し、一度ロードするとリリースが困難になるのを避けてください。同様に、コンテンツの更新のたびにダウンロードされる非常に大きな Addressables カタログファイルを作成する可能性がある小さなバンドルの膨大な数は避けてください。また、小さなバンドルが多いと、プレイヤーが必要なコンテンツをダウンロードするスピードにも影響するため、ゲームに適したバランスを決定する際には、これらの長所と短所に注意する必要があります。
デスクトップとコンソール
デスクトップとコンソールの場合、最も重要な考慮事項はパフォーマンスです。モバイルデバイスやワイヤレス VR ハードウェアと比較して、デスクトップやコンソールハードウェアは一般的にメモリやディスクストレージに関する制約が少ないです。これを念頭に置き、非圧縮アセットバンドルを構築するグループ設定を検討してください。これにより、ロード時間が最短になり、特定のプラットフォームでの効率的なパッチ適用も可能になります。
コンソール向けに開発する場合は、プラットフォーム固有のキャッシュ制限が適用される可能性があることに注意してください。モバイルプラットフォームでは、ダウンロードされたコンテンツに Unity のアセットバンドルキャッシュを利用することができますが、この機能は特定のコンソールおよび WebGL の Unity エンジンレベルではデフォルトで無効になっています。無線でリモートコンテンツを配信するよりも、それらのプラットフォームで新しいコンテンツを使用してベースゲームを更新することを検討してください。そうでない場合は、独自のカスタムアセットバンドルキャッシュシステムを作成し、ソリューションがそれらのプラットフォームの利用規約に準拠しているかどうかを判断する必要があります。
ターゲットプラットフォームの強みと限界を評価した後、Addressables システムを使用して達成しようとしている主要な目標を 1 つか 2 つ特定します。例えば以下のようにします。主にベースとなるゲームのサイズを小さくすることを目指しているのか、それともプレイヤーに無線でコンテンツの更新を配信することを計画しているのか。これらのオプションについて、以下で詳しく説明します。
基本ゲームサイズの最小化
主な目標がベースゲームのサイズを最小限に抑えることであり、インストール後のメモリ制限や大量のダウンロードをそれほど気にする必要がない場合は、できるだけ多くのアセットをシーンとリソースからリモートロードパスを持つ 1 つ以上の Addressables グループに移行することに重点を置く必要があります。
プロジェクト内のシーンをアドレス可能なものにすることを検討し、メインのプレイヤービルドに含める必要があるシーンがあれば、それを決定します。インストール後にプレイヤーに配信できるものについては、それらのシーンをリモートロードパスを持つグループに含める。この Open Projects Devlog のビデオで説明されているように、ほとんど何もないシーンを 1 つ持ってプレイヤーを構築し、そこからゲームの残りの部分を動的にロードすることもできます。

シーンをアドレス可能なものにする場合は、すべてのシーンをアドレス可能なものにして、不要なアセットの重複の可能性と量を減らすのがベストです。
リモートでホストされるアセットバンドルを生成するグループの場合は、必ずアセットバンドルキャッシュを有効にしてください。この設定により、ダウンロードされたアセットバンドルがプレイヤーのデバイスにキャッシュされ、セッションごとに再ダウンロードする必要がなくなります。
多数の小さなバンドルと少数の大きなバンドルの実行時の影響を常に念頭に置いておくことをお勧めしますが、これらの考慮事項は、他の目標を検討する際にもより重要になります。
プレイヤーにリモートコンテンツを効率的に配信
リモートコンテンツの効率的な配信を主な目的とする場合、グループ構造には、コンテンツを「ローカル」(プレイヤービルドに含まれるアセット)と「リモート」(外部のコンテンツ配信ネットワークでホストされるアセット)に分割する方法を反映させる必要があります。繰り返しになりますが、アセットバンドルキャッシュを有効にして、ダウンロードされたコンテンツをプレイヤーのデバイスにキャッシュしてください。
これらのグループのサイズ、数、バンドルモードは、プレイヤーにリモートコンテンツを配信するタイミングと、ダウンロードの完了を待つ時間によって異なります。例えば、基本となるゲームをインストールした直後にすべてのリモートコンテンツを配信できるゲームの構造になっている場合は、Pack Together または Pack Together By Label で大きなグループを選択すると、大量のダウンロードの回数が少なくなります。
セッション中に体験の邪魔にならないよう、より小さなセットのリモートコンテンツをプレイヤーに届けたい場合は、より小さなグループや、ダウンロード速度がはるかに速い小さなアセットバンドルを生成するバンドルモード設定を選択することもできます。
ほとんどの場合、リモートコンテンツを含むグループの場合は、AssetBundle Cyclic Redundancy Check(CRC)オプションを「Enabled, Excluding Cached」にすることを検討してください。これにより、リモートコンテンツがプレイヤーのデバイスにキャッシュされるため、コンテンツの整合性がさらに保証されると同時に、プレイヤーのデバイスにすでにあるコンテンツをロードするための CRC を実行する追加のオーバーヘッドを回避できます。
実行時のメモリ使用量とパフォーマンスの最適化
ゲームのランタイムパフォーマンスとメモリ使用量を最適化することが主な目的の場合は、Addressables グループ編成の最も重要なルールを思い出してください。ロードとアンロードを同時に行う予定のアセットはグループ化する必要があります。
一般的に、これは小さなアセットバンドルを作成することを意味します。これはいくつかの方法で実現できます。たとえば、小規模なグループを作成したり、ゲーム内で同時に必要とは限らないアセットを含む大規模なグループに対して、Group Settings で「Pack Together」バンドルモードを使用したりする方法です。
また、潜在的な問題や最適化の領域を特定するために、ランタイムのパフォーマンスにも注意を払う必要があります。Unity プロファイラー、メモリプロファイラーパッケージ、Addressables イベントビューアーなどの Unity 公式ツールを活用して、ゲームのパフォーマンスを最適化しましょう。
Addressables イベントビューアを置き換える、近日公開予定の Addressables Profiler Module にご期待ください。この新しいツールは、コードが Addressable Assets と AssetBundle をどのようにロードおよびアンロードしているかについて、アセットと AssetBundle 間の依存関係に関する詳細情報を含め、さらに詳細な情報を提供します。
複数の目標
もちろん、ほとんどのプロジェクトには Addressables に関連した目標がいくつかあります。この場合、万能のアプローチはありません。上記で説明したトレードオフを評価し、定義した成功を最も達成できるグループ構造と設定を見つける必要があります。
Addressables 1.21.3 で近日公開予定の Addressables Build Report と Addressables Profiler Module を利用することをお勧めします。Addressables ビルドレポートは、ファイルサイズ、重複の可能性、依存関係の詳細など、Addressables ビルドから生成されたアセットバンドルに関する詳細情報を提供します。Addressables プロファイラーモジュールは、この新しい依存関係データを利用する新しいランタイム分析ツールで、Addressables コードによって読み込まれたものと読み込まれた理由に関する正確な情報を提供します。
以下に、最も一般的なユースケースに基づいて、推奨される Addressables の設定と戦略に関する便利な「チートシート」をいくつか紹介します。もちろん、これらはあくまでも提案です。提案がプロジェクトのユニークな構造や具体的な目標と合致するかどうかは、あなた次第です。
Addressables パッケージについてご質問がある場合、または詳細を知りたい場合は、Addressables フォーラムをご覧ください。また、Twitter @Unity_Jeff で私と直接つながることもできます。現在連載中の Tech from the Trenches シリーズの他の Unity 開発者による新しい技術ブログもぜひご覧ください。
