AssetBundle へのグループのパック
グループ内のアセットを AssetBundle にパックする方法は、以下のオプションから選択できます。
- グループに割り当てられているすべての Addressable アセットを、1 つのバンドルにまとめてパックできます。これは、"Pack Together" バンドルモードに対応します。詳細については、[詳細なグループ設定] を参照してください。
- グループに割り当てられている各 Addressable アセットを、それぞれのバンドルに個別にパックできます。これは、"Pack Separately" バンドルモードに対応します。詳細については、[詳細なグループ設定] を参照してください。
- 同じラベルセットを共有するすべての Addressable アセットを、それぞれのバンドルにパックできます。これは、"Pack Together By Label" バンドルモードに対応します。詳細については、[詳細なグループ設定] を参照してください。
シーンアセットは常に、グループ内の他の Addressable アセットとは別にパックされます。シーンとシーン以外のアセットが混在するグループでは、ビルド時に必ず、シーン用とそれ以外のアセット用の少なくとも 2 つのバンドルが作成されます。
各 Addressable アセットを個別にパックするように選択した場合、Addressable としてマークされたフォルダー内のアセットと、スプライトシートなどの合成アセットは特別に処理されます。
- Addressable としてマークされたフォルダー内のアセットはすべて、同じフォルダーにまとめてパックされます (フォルダー内で個別に Addressable としてマークされたアセットは除きます)。
- Addressable スプライトアトラス内のスプライトは、同じバンドルに入れられます。
詳細については、[Content Packing & Loading 設定] を参照してください。
Note
同じグループ内に多くのアセットを保持すると、同じプロジェクトで多くの人々が作業する際に、バージョン管理の競合が発生する可能性が高くなります。
サイズの大きい少数のバンドルにコンテンツをパックするか、サイズの小さい多数のバンドルにパックするかの選択は、極端な結果につながることがあります。
バンドル数が多すぎる場合のリスク:
- 各バンドルには、[メモリオーバーヘッド] があります。参照先のページで説明されているように、これにはさまざまな要因が関係しますが、簡単に言えば、このオーバーヘッドが大量になる可能性があります。数百から数千にも上るバンドルが同時にメモリにロードされることが予想される場合は、かなりの量のメモリが消費されると考えられます。
- 同時にダウンロードできるバンドルの数には制限があります。数千ものバンドルが一度に必要になる場合でも、すべてを同時にダウンロードすることはできません。一部が先にダウロードされ、それが終了すると、さらにバンドルがダウンロードされます。実際には、これは大した問題ではありません。多くの場合は、ダウンロードされるバンドルの数よりも、その合計サイズの方に制限がかかります。
- バンドル情報によってカタログが肥大化する可能性があります。カタログのダウンロードやロードを可能にするために、バンドルに関して文字列ベースの情報が保存されます。数千ものバンドルに相当するデータによって、カタログのサイズが大幅に増大する場合があります。
- アセットが重複する可能性が高くなります。例えば、Addressable としてマークされたマテリアルが 2 つあり、それぞれが同じテクスチャに依存しているとします。これらが同じバンドル内にある場合は、テクスチャが 1 回バンドルに取り込まれ、両方のマテリアルから参照されます。別々のバンドル内にある場合は、テクスチャ自体が Addressable でなければ重複することになります。この場合、テクスチャを Addressable としてマークするか、重複を受け入れるか、2 つのマテリアルを同じバンドルに入れる必要があります。詳細については、[アセットと AssetBundle の依存関係] を参照してください。
バンドル数が少なすぎる場合のリスク:
- UnityWebRequest (ダウンロードに使用するクラス) では、失敗したダウンロードは再開されません。このため、サイズの大きいバンドルのダウンロード中に接続が失われると、再接続後にダウンロードが最初からやり直されることになります。
- アイテムはバンドルから個別にロードできますが、個別にアンロードすることはできません。例えば、バンドル内にマテリアルが 10 個あり、そのすべてをロードしてから、9 個を解放するように Addressables に指示しても、10 個すべてがメモリ内に残る可能性があります。詳細については、[メモリ管理] を参照してください。
プロジェクトの拡大時の規模による影響
プロジェクトの規模が大きくなるに従って、アセットとバンドルの以下の側面を監視する必要があります。
- バンドルの合計サイズ: 従来、Unity では、合計サイズが 4GB を超えるファイルはサポートされていませんでした。これは最近の一部のエディターバージョンでは修正されていますが、依然として問題となる場合があります。すべてのプラットフォームで最適な互換性を保つために、バンドルのコンテンツは、この制限より小さいサイズに維持することを推奨します。
- 規模に応じたバンドルレイアウト: コンテンツビルドで生成される AssetBundle の数と、それらのサイズとの間で生じるメモリとパフォーマンスのトレードオフは、プロジェクトの規模が大きくなるにつれて変化する可能性があります。
- バンドルの依存関係: Addressable アセットをロードすると、そのバンドル依存関係もすべてロードされます。Addressable グループの作成時には、アセット間の参照に注意する必要があります。詳細については、[アセットと AssetBundle の依存関係] を参照してください。
- UI パフォーマンスに影響するサブアセット: これについてのハードリミットはありませんが、アセットの数が多く、そのサブアセットの数も多い場合は、サブアセットの表示をオフにする方が効率的である場合があります。このオプションは、Groups ウィンドウでのデータの表示方法にのみ影響し、ランタイム時にどのアセットをロードできるかどうかには影響しません。このオプションは、Groups ウィンドウの Tools > Show Sprite and Subobject Addresses にあります。これを無効にすると、UI の応答性が向上します。
- グループ階層の表示: 規模が大きくなったときに役立つもう 1 つの UI 専用オプションとして、Group Hierarchy with Dashes があります。これは、トップレベル設定のインスペクター内で選択できます。これを有効にすると、名前にダッシュ "-" が含まれているグループは、ダッシュがフォルダー階層を表すように階層表示されます。実際のグループ名やビルド方法に影響はありません。例えば、"x-y-z" および "x-y-w" という 2 つのグループがある場合は、"x" というフォルダー内に "y" というフォルダーがあるように表示されます。そのフォルダー内に、"x-y-z" および "x-y-w" という 2 つのグループが表示されます。これは UI の応答性にはそれほど影響しませんが、グループ数が多い場合、これによってグループを参照しやすくなります。