docs.unity3d.com
    目次を表示する/隠す

    Addressable アセットと他のプロジェクトアセットの関係

    プロジェクトビルド設定にシーンを加えてからプレイヤーをビルドすると、Unity によって、そのシーンとシーンで使用されるすべてのアセットが、ゲームまたはアプリケーションのビルトインデータに入れられます。同様に、プロジェクトの Resources フォルダーにあるすべてのアセットが、別個のビルトインアセットコレクションに入れられます (相違点として、シーン内のアセットはシーンの一部としてのみロードされるのに対し、Resources 内のアセットは単独でのロードが可能です)。

    Addressable アセットは、"ローカル" アセットの追加セットとしてゲームまたはアプリケーション内に組み込むか、サーバーでホストされる "リモート" アセットとしてゲームビルドの外部に保持し、必要時にダウンロードすることができます。リモートアセットは、アプリケーション自体とは別に単独で更新できます (ただし、リモートアセットにコードを入れることはできないため、変更できるのはアセットとシリアル化データのみになります)。

    プロジェクトアセットがプレイヤービルドにエクスポートされるしくみ

    ただし、同じアセットをこれらのカテゴリの 2 つ以上で使用する場合、Unity は単一のインスタンスを共有するのではなく、ビルド時にアセットのコピーを作成します。例えば、あるマテリアルをビルトインシーンで使用し、それを Resources フォルダー内のプレハブでも使用した場合は、そのマテリアルアセット自体が Resources に配置されていなくても、ビルド内にはマテリアルの 2 つのコピーが作成されます。さらに、同じマテリアルを Addressable としてマークした場合は、3 つのコピーが作成されることになります (プロジェクトの StreamingAssets フォルダー内のファイルは、そのフォルダー外のアセットから参照することはできません)。

    Note

    プレイヤーをビルドする前に、Addressable アセットのコンテンツビルドを作成する必要があります。ローカル Addressable アセットは、StreamingAssets に配置したすべてのアセットと共にビルドに加えられるように、プレイヤーのビルド中に Unity によって StreamingAssets フォルダーにコピーされます (これらのアセットはビルドプロセスの終了時に削除されます)。コンテンツビルドで作成されたリモート Addressables ファイルは、開発者がホスティングサービスにアップロードする必要があります。詳細については、[ビルド] を参照してください。

    プロジェクトで Addressables を使用する場合、Unity では、シーンおよび Resources フォルダー内のすべてのデータを Addressable グループに移動し、Addressable アセットとして管理することを推奨しています。

    ビルド設定のシーンリストには、1 つ以上のシーンが含まれている必要があります。アプリケーションまたはゲームを初期化するだけの最小限のシーンを作成できます。

    通常、Resources フォルダー内の少量のデータによってパフォーマンスの問題が発生することはありません。このフォルダーにアセットを配置するサードパーティ製パッケージを使用する場合でも、問題が発生しない限りアセットを移動する必要はありません (Addressable アセットは Resources フォルダーに格納できません)。

    アセットと AssetBundle の依存関係

    Addressables グループにアセットを加えると、そのアセットが、[コンテンツビルド] の作成時に AssetBundle にパックされます。この場合、アセットはバンドルに明示的に加えられます。つまり、これは 明示的 アセットです。

    アセットが他のアセットを参照する場合、参照先アセットは元のアセットの依存関係となります。これは、アセット依存関係と呼ばれます。アセットが Assetbundle A にパックされ、参照先アセットが AssetBundle B にパックされた場合、AssetBundle B は、AssetBundle A の依存関係となります。これは、AssetBundle 依存関係と呼ばれます。詳細については、[アセットバンドルの依存性のマニュアルページ] を参照してください。

    アセット依存関係の取り扱いは、それらも Addressable であるかどうかによって異なります。Addressable である依存関係は、所属するグループの設定に従って AssetBundle にパックされます。この AssetBundle は、参照元アセットと同じバンドルの場合もあれば、異なるバンドルの場合もあります。Addressable でない依存関係は、その参照元アセットのバンドルに加えられます。参照先アセットはバンドルに暗示的に加えられます。つまり、これは 暗示的 アセットです。

    Tip

    Bundle Layout Preview 分析ルールを使用すると、Addressables グループのコンテンツに基づいて AssetBundle に加えられる明示的および暗示的なアセットを表示できます。これは、コンテンツビルドを作成する前にアセットをプレビューするときに便利です。 [Build Layout レポート] ツールを使用すると、コンテンツビルドによって作成された AssetBundle に関する詳細情報を表示できます。

    複数の Addressable アセットが、同じ暗示的アセットを参照している場合は、その暗示的アセットのコピーが、参照元 Addressable アセットが含まれる各バンドルに加えられます。

    Addressable でないアセットは、参照元 Addressable アセットを含む各バンドルにコピーされる

    暗示的なアセットが複数のバンドルに含まれている場合に起こり得る微妙な結果の 1 つとして、ゲームロジックで想定されている単一のインスタンスではなく、そのアセットの複数のインスタンスがランタイム時にインスタンス化される可能性があります。インスタンスの状態をランタイム時に変更した場合、その変更は、同じバンドルからのオブジェクトにしか認識されません。これは、他のすべてのアセットがそれぞれ独自のインスタンスになり、共通のインスタンスが共有されるわけではないためです。

    この重複を排除するには、暗示的アセットを Addressable アセットにし、既存のバンドルのいずれかに加えるか、別のバンドルに追加します。バンドルが追加されたアセットは、それを参照する Addressable アセットのいずれかがロードされるたびにロードされます。Addressable アセットが参照先アセットとは異なる AssetBundle にパックされた場合は、参照先アセットを含むバンドルが AssetBundle 依存関係となります。

    依存関係であるバンドルは、参照を含むアセットだけでなく、現在のバンドル内のどのアセットがロードされた場合もロードされることに注意してください。この別の AssetBundle 内のアセットがいずれもロードされなかったとしても、バンドルのロードにはそれ自体のランタイムコストが発生します。詳細については、[AssetBundle 依存関係のロードがメモリに及ぼす影響] を参照してください。

    Tip

    Check Duplicate Bundle Dependencies 分析ルールを使用すると、プロジェクトコンテンツの編成から生じる不要な重複アセットを特定し、解決することができます。

    スプライトアトラス

    いくつかのスプライトアトラスオプションでは、スプライトがどのようにロードされるかを変更できます。Play Mode Script の Use Asset Database 使用時には、これを考慮することが重要です。

    • [スプライトパッカーモード]
    • スプライトアトラスの Include In Build

    さらに、Addressables によるスプライトアトラスの処理は、他のアセットの処理とは少し異なります。以下に例を示します。

    Addressable スプライト

    例 1:

    3 つのテクスチャがあり、3 つの異なるグループ内で Addressable としてマークされています。各テクスチャをビルドすると、約 500 KB になります。ビルド中に、これらのテクスチャは 3 つの異なる AssetBundle にビルドされます。各 AssetBundle には、特定のスプライトのメタデータとテクスチャのみが含まれます。各 AssetBundle は約 500 KB で、どの AssetBundle にも依存関係はありません。

    例 2:

    例 1 の 3 つのテクスチャが、1 つのスプライトアトラスに入れられるとします。このアトラスは Addressable ではありません。生成される AssetBundle の 1 つがこのアトラスのテクスチャを格納し、約 1500 KB になります。他の 2 つの AssetBundle はスプライトメタデータ (数 KB) のみを含み、アトラス AssetBundle が依存関係となります。どの AssetBundle にテクスチャが格納されるかは、何度再ビルドしても同じになるという点で決定論的ですが、ユーザーが設定することはできません。これが、標準的な依存関係の重複とは異なる重要な部分です。スプライトのロードはスプライトアトラスのテクスチャに依存しますが、このテクスチャは、3 つの AssetBundle のすべてにビルドされるわけではなく、その 1 つにのみビルドされます。

    例 3:

    例 2 のスプライトアトラスが、独自の AssetBundle 内で Addressable としてマークされているとします。この時点で、4 つの AssetBundle が作成されています。Unity の 2020.x 以降のバージョンを使用している場合、これは想定どおりにビルドされます。スプライトを含む 3 つの AssetBundle は、それぞれわずか数 KB であり、4 番目のスプライトアトラス AssetBundle (約 1500 KB) に依存します。2019.x 以前を使用している場合は、テクスチャ自体が別のバンドルにビルドされる可能性があります。この場合も、3 つのスプライト AssetBundle はスプライトアトラス AssetBundle に依存します。ただし、スプライトアトラス AssetBundle に含まれるのはメタデータのみになることがあり、テクスチャは他のスプライト AssetBundle のいずれかに入れられる場合があります。

    スプライト依存関係を持つ Addressable プレハブ

    例 1:

    3 つの Addressable テクスチャの代わりに、3 つの Addressable スプライトプレハブがあります。各プレハブは、そのそれぞれのスプライト (約 500 KB) に依存します。3 つのプレハブを個別にビルドすると、想定どおりに、それぞれが約 500 KB の 3 つの AssetBundle が作成されます。

    例 2:

    前の例にプレハブとテクスチャを当てはめて、3 つのテクスチャのすべてが 1 つのスプライトアトラスに加えられ、そのアトラスは Addressable としてマークされないものとします。このシナリオでは、スプライトアトラステクスチャが重複します。3 つの AssetBundle は、いずれも約 1500 KB になります。これは、依存関係の重複に関する一般的なルールに基づけば想定どおりですが、"Addressable スプライトの例 2" で見られる動作には反しています。

    例 3:

    前の例にプレハブ、テクスチャ、スプライトアトラスを当てはめて、スプライトアトラスも Addressable としてマークされているとします。明示的に加える場合のルールに従って、スプライトアトラステクスチャは、スプライトアトラスを含む AssetBundle にのみ入れられます。プレハブを含む AssetBundle は、この 4 番目の AssetBundle を依存関係として参照します。

    シェーダー

    デフォルトでは、Unity によって、シーンで使用されていない [シェーダーバリアントが除去] されます。これにより、AssetBundle でしか使用されないバリアントが除外される場合があります。特定のバリアントが除去されないようにするには、そのバリアントを、[Graphics 設定] の Shader Stripping (シェーダーストリッピング) プロパティに加えます。

    例えば、[混合ライト] などのライトマップ関連のシェーダーを使用する Addressable アセットがある場合は、Shader Stripping > Lightmap Mode プロパティを Custom に設定します。

    [Quality 設定] も、AssetBundle で使用されるシェーダーバリアントに影響します。

    トップに戻る
    Copyright © 2023 Unity Technologies — 商標と利用規約
    • 法律関連
    • プライバシーポリシー
    • クッキー
    • 私の個人情報を販売または共有しない
    • Your Privacy Choices (Cookie Settings)