グループ設定
グループ内のアセットがコンテンツビルドでどのように処理されるかは、グループ設定によって決まります。例えば、AssetBundle がビルドされる場所や、バンドル圧縮の設定などを指定できます。
グループの設定は、グループにアタッチされた Schema オブジェクトで宣言されます。Packed Assets (パックされたアセット) [テンプレート] でグループを作成すると、Content Packing & Loading および Content Update Restriction スキーマによってグループの設定が定義されます。デフォルトの [ビルドスクリプト] は、これらの設定が定義されていることを前提としています。
デフォルトローカルグループの Inspector ウィンドウ
Note
Blank (空白) テンプレートでグループを作成した場合は、グループにスキーマがアタッチされません。このようなグループのアセットはデフォルトビルドスクリプトで処理できません。
Content Packing & Loading 設定
Build and Load Paths
Content Packing & Loading スキーマの Build and Load Paths 設定は、コンテンツビルドのアーティファクトが作成される場所と、Addressables システムがランタイム時にアーティファクトを探す場所を決定します。
ビルドパスとロードパス
設定 | 目的 |
---|---|
Build & Load Paths | このグループのアーティファクトが Addressables ビルドシステムによって作成される場所と、それらのアーティファクトが Addressables システムによってランタイム時にロードされる場所を定義するプロファイルパスの組み合わせ。リストからパスの組み合わせを選択するか、ビルドパスとロードパスを個別に設定する場合は <custom> を選択します。 |
Build Path | このグループのアーティファクトが Addressables ビルドシステムによって作成される場所を定義するプロファイル変数。カスタム文字列を設定することもできます。以下のいずれかをビルドパスとして使用します。 - LocalBuildPath: アプリケーションのインストールの一部として配布する予定のアセットに使用します。 - RemoteBuildPath: Unity Cloud Content Delivery やその他のコンテンツデリバリネットワークなどのリモートホスティングサービスを使用して配布する予定のアセットに使用します。 - <custom>: このグループのビルドパスとして文字列を指定します。このオプションは、 Build & Load Paths に <custom> を設定した場合にのみ表示されます。 |
Load Path | このグループのビルドアーティファクトが Addressables システムによってランタイム時にロードされる場所を定義するプロファイル変数。カスタム文字列を設定することもできます。以下のいずれかをロードパスとして使用します。 - LocalLoadPath: アプリケーションのインストールの一部として配布する予定のアセットに使用します。 - RemoteLoadPath: Unity Cloud Content Delivery やその他のコンテンツデリバリネットワークなどのリモートホスティングサービスを使用して配布する予定のアセットに使用します。 - <custom>: このグループのロードパスとして文字列を指定します。このオプションは、 Build & Load Paths に <custom> を設定した場合にのみ表示されます。 |
ビルドパスとロードパスのオプションは、[プロファイル] の変数によって定義されます。設定には、その目的に合った変数のみを使用する必要があります。例えば、ビルドパス設定にロードパス変数を選択しても、有用な結果は得られません。
プロファイル変数を選択すると、パスの現在の評価が Path Preview (パスのプレビュー) に表示されます。{UnityEngine.AddressableAssets.Addressable.RuntimePath}
のように波かっこで囲まれたパスの構成要素は、静的変数を使用して、最終的なパスをランタイム時に構築することを示します。パスのその部分は、Addressables システムがランタイム時に初期化されるときに、静的変数の現在の値で置き換えられます。
Warning
ほとんどの場合、ローカルビルドパスやローカルロードパスのデフォルト値は変更するべきではありません。変更する場合は、プレイヤービルドを作成する前に、ローカルビルドのアーティファクトをカスタムのビルドの場所からプロジェクトの [StreamingAssets] フォルダーにコピーする必要があります。これらのパスを変更すると、プレイヤービルドの一部として Addressables をビルドすることもできなくなります。
詳細については、[プロファイル] を参照してください。
Advanced Options
Advanced Options セクション
設定 | 目的 |
---|---|
Asset Bundle Compression | グループから作成されるすべてのバンドルの圧縮タイプ。通常、最も効率的なオプションは LZ4 ですが、特定の状況では他のオプションの方が適している場合があります。詳細については、[AssetBundle の圧縮] を参照してください。 |
Include In Build | このグループのアセットをコンテンツビルドに入れるかどうか。 |
Force Unique Provider | Addressables で、このグループに対してリソースプロバイダークラスの固有のインスタンスを使用するかどうか。このグループのアセットタイプ用にカスタムプロバイダーの実装があり、そのプロバイダーをグループ間で共有できない場合は、このオプションを有効にします。 |
Use Asset Bundle Cache | リモート配布するバンドルをキャッシュするかどうか。 |
Asset Bundle CRC | ロードする前に、バンドルの整合性を確認するかどうか。 • Disabled (無効): バンドルの整合性を確認しません。 • Enabled, Including Cached (有効、キャッシュされたものを含む): バンドルの整合性を常に確認します。 • Enabled, Excluding Cached (有効、キャッシュされたものを除く): バンドルの整合性をダウンロード時に確認します。 |
Use UnityWebRequest for Local Asset Bundles | このグループからローカル AssetBundle アーカイブをロードするときに、AssetBundle.LoadFromFileAsync ではなく UnityWebRequestAssetBundle.GetAssetBundle を使用します。 |
Request Timeout | リモートバンドルのダウンロードのタイムアウト間隔。 |
Use Http Chunked Transfer | バンドルのダウンロード時に HTTP/1.1 チャンク転送エンコーディング方式を使用するかどうか。 Unity 2019.3 以降では非推奨であり、無視されます。 |
Http Redirect Limit | バンドルのダウンロード時に許可されるリダイレクトの回数。制限しない場合は -1 に設定します。 |
Retry Count | ダウンロードが失敗したときに再試行する回数。 |
Include Addresses in Catalog | カタログにアドレス文字列を入れるかどうか。グループ内のアセットをロードするときにアドレス文字列を使用しない場合は、カタログにそれらの文字列を入れないようにすることで、カタログのサイズを削減できます。 |
Include GUIDs in Catalog | カタログに GUID 文字列を入れるかどうか。AssetReference を使用してアセットにアクセスするには、GUID 文字列を入れる必要があります。グループ内のアセットをロードするときに AssetReference も GUID 文字列も使用しない場合は、カタログにそれらの文字列を入れないようにすることで、カタログのサイズを削減できます。 |
Include Labels in Catalog | カタログにラベル文字列を入れるかどうか。グループ内のアセットをロードするときにラベルを使用しない場合は、カタログにラベルを入れないようにすることで、カタログのサイズを削減できます。 |
Internal Asset Naming Mode | AssetBundle 内のアセットの ID を決定します。これは、バンドルからアセットをロードするために使用されます。この値は、アセットの場所の内部 ID として使用されます。この設定を変更すると、バンドルの CRC とハッシュ値に影響します。 注意: [コンテンツ更新ビルド] では、この設定を変更しないでください。[コンテンツ状態ファイル] に保存されたデータが無効になります。 以下のモードがあります。 - Full Path: プロジェクト内のアセットのパス。このモードは、開発中に使用することを推奨します。このモードでは、ロードされているアセットを必要に応じて ID で識別できるためです。 - Filename: アセットのファイル名。これはアセットを識別するために使用することもできます。ノート: 複数のアセットを同じ名前にすることはできません。 - GUID: アセットの決定論的な値。 - Dynamic: グループ内のアセットに基づいて作成できる最も短い ID。このモードは、リリースに使用することを推奨します。AssetBundle およびカタログ内のデータ量が小さくなり、ランタイム時のメモリオーバーヘッドも削減できるためです。 |
Internal Bundle Id Mode | AssetBundle が内部的にどのように識別されるかを決定します。これは、他のバンドルに含まれている依存関係を AssetBundle が見つける方法に影響します。この値を変更すると、このバンドルと、それを参照する他のすべてのバンドルの CRC とハッシュに影響します。 注意: [コンテンツ更新ビルド] では、この設定を変更しないでください。[コンテンツ状態ファイル] に保存されたデータが無効になります。 以下のモードがあります。 - Group Guid: グループの一意の ID。このモードは変化しないため、これを使用することを推奨します。 - Group Guid Project Id Hash: グループ GUID とクラウドプロジェクト ID (クラウドサービスが有効な場合) の組み合わせを使用します。これは、プロジェクトが別のクラウドプロジェクト ID にバインドされると変わります。このモードは、複数のプロジェクトでアセットを共有している場合に推奨します。作成される ID が決定論的であり、複数のプロジェクト間で一意になるためです。 - Group Guid Project Id Entries Hash: グループ GUID、クラウドプロジェクト ID (クラウドサービスが有効な場合)、およびグループ内のアセットエントリーの組み合わせを使用します。このモードを使用すると、バンドルキャッシュバージョンの問題が発生しやすくなることに注意してください。エントリーの追加または削除を行うと、ハッシュが変わります。 |
Cache Clear Behavior | インストールされたアプリケーションがキャッシュから AssetBundle を消去するタイミングを決定します。 |
Bundle Mode | このグループ内のアセットをバンドルにパックする方法。 - Pack Together: すべてのアセットを含む 1 つのバンドルを作成します。 - Pack Separately: グループ内のプライマリアセットごとにバンドルを作成します。スプライトシート内のスプライトなど、サブアセットは一緒にパックされます。グループに加えられたフォルダー内のアセットも一緒にパックされます。 - Pack Together by Label: 同じ組み合わせのラベルを共有するアセットのバンドルを作成します。 |
Bundle Naming Mode | AssetBundle のファイル名を作成する方法。 - Filename: ファイル名は、グループ名から派生した文字列になります。ハッシュは付加されません。 - Append Hash to Filename: ファイル名は、グループ名から派生した文字列にバンドルハッシュを付加した名前になります。バンドルハッシュは、バンドルのコンテンツを使用して計算されます。 - Use Hash of AssetBundle: ファイル名は、バンドルハッシュになります。 - Use Hash of Filename: ファイル名は、グループ名から派生した文字列から計算されたハッシュになります。 |
Asset Load Mode | リクエストに応じてアセットを個別にロードする (デフォルト) か、グループ内のすべてのアセットを常にまとめてロードするかを指定します。ほとんどの場合は、Requested Asset and Dependencies を使用することを推奨します。詳細については、[アセットロードモード] を参照してください。 |
Asset Provider | このグループから生成された AssetBundle 内のアセットをロードするために、Addressables で使用するプロバイダークラスを定義します。AssetBundle からアセットを提供するカスタムプロバイダーの実装がある場合を除き、このオプションは Assets from Bundles Provider に設定します。 |
Asset Bundle Provider | このグループから生成された AssetBundle をロードするために、Addressables で使用するプロバイダークラスを定義します。AssetBundle を提供するカスタムプロバイダーの実装がある場合を除き、このオプションは AssetBundle Provider に設定します。 |
Asset Bundle Compression
Addressables には、バンドルの圧縮オプションとして、Uncompressed (非圧縮)、LZ4、LZMA の 3 つが用意されています。一般的には、LZ4 はローカルコンテンツに、LZMA はリモートコンテンツに使用しますが、例外もあるため、ここで詳しく説明します。
圧縮オプションは、各グループの詳細設定を使用して設定できます。圧縮しても、ロードされたコンテンツのメモリ内サイズに影響はありません。
- Uncompressed - このオプションでは、ディスク上のサイズが最大になり、通常はロード時間が最短となります。ゲームのスペースに余裕がある場合は、少なくともローカルコンテンツ用にこのオプションを検討することをお勧めします。非圧縮バンドルの主なメリットは、パッチの処理方法にあります。パッチ機能のあるプラットフォーム (Steam や Switch など) を対象に開発を行っている場合は、非圧縮バンドルを選択したときに最も精度の高い (サイズの小さい) パッチが提供されます。他の 2 つの圧縮オプションでは、いずれもある程度のパッチの肥大化が発生します。
- LZ4 - Uncompressed オプションを使用できない状況では、他のすべてのローカルコンテンツに LZ4 を使用する必要があります。これはチャンクベースの圧縮であるため、ファイル全体をロードする必要なく、部分的にロードすることが可能になります。
- LZMA - LZMA は、すべてのリモートコンテンツに使用する必要があります。ローカルコンテンツには使用しません。このオプションでは、バンドルサイズが最小になりますが、ロード時間は長くなります。ローカルバンドルを LZMA で格納すると、サイズの小さいプレイヤーを作成できますが、非圧縮や LZ4 よりもロード時間が大幅に長くなります。ダウンロードされたバンドルの場合は、ロード時間の増加を回避するために、ダウンロードされたバンドルがキャッシュへの格納時に再圧縮されます。デフォルトでは、バンドルは LZ4 圧縮を使用してキャッシュに格納されます。
Note
LZMA AssetBundle 圧縮は、WebGL での AssetBundle には使用できません。代わりに LZ4 圧縮を使用できます。WebGL AssetBundle の詳細については、[WebGL プロジェクトのビルドと実行] を参照してください。
プラットフォームのハードウェア特性により、非圧縮バンドルが必ずしも最短の時間ではロードされない可能性があることに注意してください。非圧縮バンドルのロードの最大速度は IO 速度によって制限され、LZ4 圧縮バンドルのロードの速度は、ハードウェアに応じて IO 速度または CPU によって制限されます。ほとんどのプラットフォームでは、LZ4 圧縮バンドルは CPU 依存であり、非圧縮バンドルのロード時間の方が短くなります。IO が低速で CPU が高速なプラットフォームでは、LZ4 のロード時間の方が短くなることがあります。開発中のゲームに一般的なパターンが当てはまるか、独自の調整が必要かを評価するために、常にパフォーマンス分析を実行することを推奨します。
Unity での圧縮処理の詳細については、[アセットバンドルの圧縮のマニュアルページ] を参照してください。
Asset Load Mode
ほとんどのプラットフォームおよびコンテンツのコレクションでは、Requested Asset and Dependencies を使用することが推奨されます。このモードでは、LoadAssetAsync または LoadAssetsAsync でリクエストされたアセットに必要なものだけがロードされます。オブジェクトはバンドルファイルに出現する順番に基づいてロードされるため、同じファイルが複数回読み取られる場合があります。[Addressables の Build 設定] で Contiguous Bundles (連続バンドル) オプションを有効にすると、余分なファイル読み取りの回数を減らせる可能性があります。
これにより、使用されないアセットがメモリにロードされる状況が発生しなくなります。
ロード画面のように、一緒にパックされているアセットをすべてロードする状況でのパフォーマンス。ほとんどのタイプのコンテンツは、Requested Asset and Dependencies モードを使用して個別にロードすると、パフォーマンスがほぼ同じになるか向上します。このモードでは、バンドルファイル全体が順番に読み取られます。Switch などの一部のプラットフォームでは、この動作の方が適している場合があります。
Note
以下の例は、デスクトップとモバイルのプラットフォームに適用されます。パフォーマンスは各プラットフォームで異なる場合があります。Nintendo Switch では、ハードウェアとメモリの読み取りの制限から、一般的に All Packed Assets and Dependencies (パックされたすべてのアセットと依存関係) モードの方が、アセットを個別にロードするよりもパフォーマンスが高くなります。 使用するコンテンツとプラットフォームのロードパフォーマンスをプロファイルして、開発中のアプリケーションに適した設定を調べることを推奨します。
ロードパフォーマンスは、コンテンツタイプによって異なる可能性があります。例えば、プレハブや ScriptableObject など、他のシリアル化データへの直接参照を伴うシリアル化データが多い場合は、All Packed Assets and Dependencies を使用する方がロード時間が短くなります。テクスチャのようなその他のアセットでは、多くの場合、各アセットを個別にロードするとパフォーマンスを高めることができます。
[同期的な Addressables] を使用する場合、アセットのロードモード間でパフォーマンスの差はほとんどありません。コンテンツが同期的にロードされることがわかっている場合は、柔軟性に優れた Requested Asset and Dependencies を使用することを推奨します。
All Packed Assets and Dependencies モードでは、最初のアセットのロード時に、すべてのアセットがメモリ内にロードされます。その後、同じパック内のアセットに対して LoadAssetAsync を呼び出すときには、アセットのロードは不要となり、 事前ロードされたアセットが返されます。
All Packed Assets and Dependencies オプションの使用時には、グループ内のすべてのアセットと依存関係がメモリ内にロードされますが、個々のアセットの参照カウントは、そのアセットを明示的にロードしない限り (または、明示的にロードしたアセットの依存関係でない限り) 増加しません。後で Resources.UnloadUnusedAssets を呼び出すか、または LoadSceneMode.Single を使用して新しいシーンをロードすると、使用されていないアセット (参照カウントが 0 のアセット) はアンロードされます。
Content Update Restriction
Content Update Restriction オプションは、[Check for Content Update Restrictions] ツールによってグループ内のアセットがどのように処理されるかを決定します。差分更新コンテンツビルド用に (フルコンテンツビルドではなく) グループを準備するには、このツールを実行します。このツールは、Cannot Change Post Release (リリース後に変更不可) に設定されたグループから、変更されたアセットを新しいグループに移動します。
Update Restriction では、以下のオプションを選択できます。
- Can Change Post Release: ツールによるアセットの移動は行われません。バンドル内のアセットが変更されている場合は、そのバンドル全体が再ビルドされます。
- Cannot Change Post Release: アセット内のバンドルが変更されている場合、それらのアセットは、[Check for Content Update Restrictions] ツールによって更新用に作成された新しいグループに移動されます。更新ビルドを作成すると、この新しいグループから作成された AssetBundle 内のアセットによって、既存のバンドルで見つかったバージョンがオーバーライドされます。
詳細については、[コンテンツ更新ビルド] を参照してください。
グループテンプレート
グループテンプレートは、新しいグループ用に作成されるスキーマオブジェクトのタイプを定義するものです。Addressables システムには Packed Assets テンプレートが含まれており、これには、デフォルトビルドスクリプトを使用して Addressable のビルドとロードを行うために必要な設定がすべて含まれています。
追加の設定が必要な独自のビルドスクリプトまたはユーティリティを作成する場合は、これらの設定を独自のスキーマオブジェクトに定義し、独自のグループテンプレートを作成することができます。
- Project (プロジェクト) パネルを使用して、Assets フォルダー内の目的の場所に移動します。
- Blank Group Template (空白のグループテンプレート) を作成します (メニュー: Assets > Addressables > Group Templates > Blank Group Templates)。
- このテンプレートに、適切な名前を付けます。
- Inspector ウィンドウで、必要に応じて説明を加えます。
- Add Schema ボタンをクリックし、リストからスキーマを選択します。
- 必要なスキーマがすべてリストに追加されるまで、スキーマの追加を繰り返します。
Note
デフォルトビルドスクリプトを使用する場合は、グループに Content Packing & Loading スキーマを使用する必要があります。コンテンツ更新ビルドを使用する場合は、グループに Content Update Restrictions スキーマが含まれる必要があります。詳細については、[ビルド] を参照してください。
スキーマ
グループスキーマは、Addressables グループの設定のコレクションを定義する ScriptableObject です。グループには、任意の数のスキーマを割り当てることができます。Addressables システムには、それ自体の目的のために多くのスキーマが定義されています。また、独自のビルドスクリプトとユーティリティをサポートするカスタムスキーマを作成することもできます。
以下のようなビルトインスキーマがあります。
- Content Packing & Loading: デフォルトビルドスクリプトで使用される Addressables メインスキーマです。Addressable アセットのビルドとロードの設定を定義します。
- Content Update Restrictions: 以前のビルドの差分更新を作成するための設定を定義します。更新ビルドの詳細については、[ビルド] を参照してください。
- Resources and Built In Scenes: Built In Data グループにどのタイプのビルトインアセットを表示するかの設定を定義する、特殊な目的のスキーマです。
カスタムスキーマの定義
独自のスキーマを作成するには、AddressableAssetGroupSchema クラス (ScriptableObject の一種) を拡張します。
using UnityEditor.AddressableAssets.Settings;
public class **CustomSchema **: AddressableAssetGroupSchema
{
public string CustomDescription;
}
カスタムスキーマオブジェクトを定義したら、それを既存のグループやグループテンプレートに加えることができます。そのためには、追加先のエンティティの Inspector ウィンドウにある Add Schema ボタンを使用します。
また、カスタムエディタースクリプトを作成して、ユーザーによるカスタム設定の操作をサポートすることもできます。[変数とインスペクター] を参照してください。
ビルドスクリプトでは、AddressableAssetGroup オブジェクトを使用して、グループのスキーマ設定にアクセスすることができます。