複数のプロジェクトからのロード
Addressables パッケージがインストールされた複数の Unity プロジェクトに分割された大規模プロジェクトなど、複数プロジェクト用のワークフローが必要な状況では、Addressables.LoadContentCatalogAsync
を使用して、さまざまなプロジェクト間でコードとコンテンツをリンクすることができます。アプリケーションのさまざまな面から複数のチームが同時に作業するスタジオでは、このワークフローが役立つ可能性があります。
複数のプロジェクトの設定
複数のプロジェクトの設定では、主な注意点として以下を確認する必要があります。
- 各プロジェクトで、同じバージョンの Unity エディターを使用する
- 各プロジェクトで、同じバージョンの Addressables パッケージを使用する
その後、状況に合わせて適切なものを何でもプロジェクトに格納できます。プロジェクトの 1 つは、"メインプロジェクト" または "ソースプロジェクト" にする必要があります。これが実際にビルドするプロジェクトであり、ここからゲームのバイナリを展開します。通常、このソースプロジェクトは主にコードで構成され、コンテンツはほとんど含まれません。主要プロジェクトに必要となる主なコンテンツは、少なくともブートストラップシーンです。AssetBundle がダウンロードされてキャッシュされるのを待たずに、パフォーマンスの目的でローカルにする必要のあるシーンを加えることが望ましい場合もあります。
補助的プロジェクトは、多くの場合、正反対です。大部分はコンテンツであり、コードはほとんど含まれません。これらのプロジェクトでは、リモート Addressable (アドレス指定可能) グループをすべて格納し、Build Remote Catalog (リモートカタログのビルド) をオンにする必要があります。 これらのプロジェクト内にビルドされたローカルデータはいずれも、ソースプロジェクトのアプリケーションにはロードできません。重要でないシーンをこれらのプロジェクトに入れて、リクエスト時に主要プロジェクトによってダウンロードできます。
一般的なワークフロー
プロジェクトを設定した後の一般的なワークフローは以下のとおりです。
- すべての補助的プロジェクトのリモートコンテンツをビルドします。
- ソースプロジェクトの Addressables コンテンツをビルドします。
- ソースプロジェクトの再生モードを開始するか、ソースプロジェクトのバイナリをビルドします。
- ソースプロジェクトで
Addressables.LoadContentCatalogAsync
を使用して、他のさまざまなプロジェクトのリモートカタログをロードします。 - 通常どおりにゲームランタイムの作業を進めます。カタログがロードされたので、Addressables により、これらの場所のどこからでもアセットをロードできます。
ソースプロジェクトでは、最小限の量のコンテンツをローカルにビルドすると役立つ場合があります。各プロジェクトは固有であるため、固有のニーズがありますが、インターネットやその他のさまざまな問題が発生した場合に備えて、ゲームの実行に必要な少量のコンテンツを用意しておくことを推奨します。
シェーダーの処理
Addressables では、ビルドされる Addressables プレイヤーデータのセットごとに、Unity のビルトインシェーダーバンドルがビルドされます。つまり、補助的プロジェクトでビルドされた複数の AssetBundle がロードされると、複数のビルトインシェーダーバンドルが同時にロードされる可能性があります。
具体的な状況によっては、AddressableAssetSettings
オブジェクトでシェーダーバンドル命名プレフィックスを使用することが必要になります。各ビルトインシェーダーバンドルには、他のプロジェクトでビルドされた他のビルトインシェーダーバンドルとは異なる名前をつける必要があります。異なる名前でない場合は、The AssetBundle [bundle] can't be loaded because another AssetBundle with the same files is already loaded.
(同じファイルを含む別の AssetBundle が既にロードされているため、AssetBundle バンドルをロードできません) というエラーが発生します。