9. アセットの依存関係、Addressable が他のプロジェクト アセットとどのように相互作用するか

プロジェクトのビルド設定にシーンを含めてプレーヤーをビルドすると、Unity はそのシーンと、シーンで使用されているアセットをゲームまたはアプリケーションの組み込みデータに含めます。同様に、Unity は、プロジェクトのアセット フォルダー内のすべてのアセットを、組み込みアセットの別個のコレクションに含めます。(違いは、シーン内のアセットはシーンの一部としてのみロードされるのに対し、アセット内のアセットは独立してロードできることです。)

アドレス指定可能なアセットは、「ローカル」アセットの追加セットとしてゲームまたはアプリケーションに組み込むことも、サーバー上でホストされ必要に応じてダウンロードされる「リモート」アセットとしてゲーム ビルドの外部に保持することもできます。アプリケーション自体とは独立してリモート アセットを更新できます (ただし、リモート アセットにはコードを含めることができないため、変更できるのはアセットとシリアル化されたデータのみです)。

プロジェクト アセットがプレーヤー ビルドにエクスポートされる方法

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

ノート

プレーヤーを構築する前に、アドレス指定可能なアセットに基づいてコンテンツを構築する必要があります。プレーヤーのビルド中に、Unity はローカルの Addressables を StreamingAssets フォルダーにコピーし、StreamingAssets に配置したアセットとともにビルドに含まれるようにします。(これらのアセットはビルド プロセスの最後に削除されます。) コンテンツ ビルドによって生成されたリモート Addressables ファイルをホスティング サービスにアップロードするのはユーザーの責任です。詳細については、ビルドを参照してください

プロジェクトで Addressable を使用する場合、Unity では、Assets フォルダー内のシーンとすべてのデータを Addressable グループに移動し、Addressable として管理することをお勧めします。

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

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

子オブジェクトの参照

Unity は、アセットとスクリプトが相互にどのように参照するかに基づいて、コンテンツ ビルドに何を含めるかを部分的に決定します。サブオブジェクト参照により、プロセスがさらに複雑になります。

AssetReferenceアドレス指定可能なアセットのサブオブジェクトを指している場合、Unity はAssetBundleビルド時間内にオブジェクト全体をビルドします。サブオブジェクトを直接参照する Addressable オブジェクトAssetReference(例GameObject:または ) を指定している場合、 ScriptableObjectUnity はサブオブジェクトを暗黙的な依存関係としてのみ構築します。SceneAssetBundle

アセットとアセットバンドルの依存関係

アセットを Addressables グループに追加すると、コンテンツの構築時にアセットが AssetBundle にパッケージ化されます。この場合、アセットはバンドルに明示的に含まれています。言い換えれば、それは明示的なアセットです。

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

アセットの依存関係の処理は、それらもアドレス指定可能かどうかによって異なります。アドレス指定可能な依存関係は、それらが属するグループの設定に従って AssetBundle にパッケージ化されます。これは、参照されるアセットと同じバンドルでも、別のバンドルでも構いません。アドレス指定できない依存関係が、それが参照するアセットのバンドルに含まれています。参照されたアセットはバンドルに暗黙的に含まれます。つまり、暗黙的なアセットです。

ヒント

バンドル レイアウト プレビュー分析ルールを使用して 、Addressables グループの内容に基づいてアセットバンドルに含まれる明示的および暗黙的なアセットを表示します。これは、コンテンツを構築する前にアセットをプレビューする場合に便利です。ビルド レイアウト レポートツールを使用して、コンテンツ ビルドによって生成されたアセットバンドルに関する詳細を表示します。

複数の Addressable が同じ暗黙的アセットを参照する場合、暗黙的アセットのコピーは、参照された Addressable を含む各パッケージに含まれます。

 

アドレス指定不可能なアセットは、参照アドレス指定可能な各パッケージにコピーされます。

暗黙的アセットが複数のパッケージに含まれている場合に発生する可能性がある微妙な結果は、ゲーム ロジックが期待する単一のインスタンスではなく、実行時にアセットの複数のインスタンスがインスタンス化される可能性があることです。実行時にインスタンスの状態を変更すると、他のすべてのアセットが共通のインスタンスを共有するのではなく独自のインスタンスを持つようになるため、同じパッケージのオブジェクトのみが変更を認識します。

この重複を排除するには、暗黙的なアセットをアドレス指定可能にして、それを既存のバンドルの 1 つに含めるか、別のバンドルに追加します。アセットが追加されたバンドルは、それを参照する Addressable の 1 つをロードするたびにロードされます。Addressable が参照されるアセットとは異なるアセットバンドルにパッケージ化されている場合、参照されるアセットを含むバンドルはアセットバンドルの依存関係になります。

現在のバンドル内のアセットをロードする場合、参照を含むアセットだけでなく、依存するバンドルもロードする必要があることに注意してください。他の AssetBundle からアセットをロードすることはありませんが、バンドルのロードには独自の実行時コストがかかります。詳細については、「AssetBundle 依存関係のロードによるメモリへの影響」を参照してください。

ヒント

重複バンドル依存関係分析ルールの確認を使用して、 プロジェクト コンテンツの編成によって引き起こされるアセットの不要な重複を特定し、解決します。

おすすめ

転載: blog.csdn.net/youmangu/article/details/129862574