2. Addressables システムへのアップグレード

この記事では、アドレス指定可能な資産を利用するために既存のプロジェクトを変更する方法について説明します。

Addressables システムの外で、Unity はアセットを参照およびロードするための「従来の」方法をいくつか提供しています。

  • シーン データ: シーンまたはシーン内のコンポーネントに直接追加するアセットで、アプリによって自動的にロードされます。Unity は、シリアル化されたシーン データとシーンによって直接参照されるアセットをアーカイブにパッケージ化し、構築するプレーヤー アプリケーションに含めます。「 シーンの変換アドレス指定不可能なシーンでのアドレス指定可能なアセットの使用 」を参照してください
  • プレハブ: ゲームオブジェクトとコンポーネントを使用して作成し、シーンの外部に保持されるアセット。「プレハブの変換」を参照してください
  • リソース フォルダー: プロジェクトのリソース フォルダーに配置し、リソース API を使用してロードするアセット。Unity は、リソース ファイル内のアセットをアーカイブにパッケージ化し、それを構築するプレーヤー アプリケーションに含めます。アセット アーカイブはシーン データ アーカイブとは別のものです。「リソース フォルダーの変換」を参照してください
  • AssetBundles : AssetBundle にパッケージ化し、AssetBundle API を使用してロードするアセット。「アセットバンドルの変換」を参照してください
  • StreamingAssets : StreamingAssets フォルダーに配置するファイル。Unity は、StreamingAssets フォルダー内のすべてのファイルを、ビルドするプレーヤー アプリケーションにそのまま含めます。StreamingAssets のファイルを表示する

アドレス指定可能なものに変換する

Addressables で構築されたコンテンツは、その Addressables ビルド内で構築された他のアセットのみを参照します。使用または参照されるコンテンツは両方のアドレス指定可能に含まれており、シーン データリソース フォルダーから構築されたプレーヤーはディスク上とメモリ上に複製されます (両方がロードされている場合)。この制限のため、推奨されるベスト プラクティスは、すべてのシーン データリソース フォルダーをAddressables ビルド システムに変換することです。レプリケーションによるメモリのオーバーヘッドを削減し、すべてを Addressables で管理できるようにします。許可されるコンテンツはローカルまたはリモートにすることができ、コンテンツ更新ビルドを通じて更新されます。

シーンを切り替える

Addressable をプロジェクトに統合する最も簡単な方法は、シーンをビルド設定リストから移動し、それらのシーンをアドレス指定可能にすることです。リスト内にシーン、つまりアプリケーションの起動時に Unity がロードするシーンが必要です。このために新しいシーンを作成できます。これは、最初のアドレス指定可能なシーンをロードするだけです。

シーンを変換するには:

  1. 新規に「初期化」シーンを作成します。
  2. [ビルド設定]ウィンドウを開きます(メニュー: [ファイル] > [ビルド設定])。
  3. 初期化中のシーンをシーンリストに追加します。
  4. 他のシーンをリストから削除します。
  5. プロジェクト リスト内の各シーンをクリックし、インスペクター ウィンドウで [Addressable] オプションをオンにします。あるいは、シーン アセットを [アドレス指定可能なグループ] ウィンドウのグループにドラッグすることもできます。(新しい初期化シーンをアドレス指定可能にしないでください。)
  6. SceneManager メソッドの代わりにAddressablesクラスのシーン読み込みメソッドを使用するように、シーンを読み込むコードを更新します。

この時点で、シーン内のすべてのアセットが Addressable グループに含まれており、Addressables コンテンツを構築すると、Addressables システムによってそれらのアセットが AssetBundle にパッケージ化されます。すべてのシーンに対して 1 つのグループのみを使用している場合、実行時の負荷とメモリのパフォーマンスは、プロジェクトのアドレス指定可能前の状態とほぼ同等になるはずです。

大きなアドレス指定可能なシーン グループを複数のグループに分割できるようになりました。最適なアプローチはプロジェクトの目標によって異なります。続行するには、シーンを独自のグループに移動して、各シーンを個別にロードおよびアンロードできるようにします。これを行うと、分析ツールを使用して、複数のシーン間で共有されている重複アセットをチェックできます。アセット自体をアドレス指定可能にすることで、2 つの異なるパッケージから参照されるアセットの重複を避けることができます。通常は、共有アセットも独自のグループに移動して、AssetBundle 間の相互依存性を減らすことが最善です。

アドレス指定不可能なシナリオでのアドレス指定可能な資産の使用

アドレス指定可能にしたくないシーンの場合でも、AssetReferencesを介してシーン データの一部としてアドレス指定可能なアセットを使用できます。

AssetReference フィールドをカスタム MonoBehaviour または ScriptableObject クラスに追加すると、アセットを直接参照として割り当てるのとほぼ同じ方法で、Unity エディターでアドレス指定可能なアセットをフィールドに割り当てることができます。主な違いは、AssetReference フィールドに割り当てられたアセットをロードおよび解放するにはクラスにコードを追加する必要があることです (一方、Unity はシーン内でオブジェクトをインスタンス化するときに直接参照を自動的にロードします)。

ノート

アドレス指定できないシーンでは、UnityEngine コンポーネントのフィールドにアドレス指定可能なアセットを使用できません。たとえば、アドレス指定可能なメッシュ アセットをアドレス指定不可能なシーンの MeshFilter コンポーネントに割り当てる場合、Unity はそのシーンに対してそのメッシュ データのアドレス指定可能なバージョンを使用しません。代わりに、Unity はメッシュ アセットをコピーし、アプリケーションに 2 つのバージョンのメッシュを含めます。1 つはメッシュを含むアドレス指定可能なグループ用に構築された AssetBundle に、もう 1 つはアドレス指定できないシーンの組み込みシーン データに含まれます。(アドレス指定可能なシーンで使用される場合、Unity はメッシュ データをコピーせず、常にアセットバンドルからロードします。)

カスタム クラスで直接参照を AssetReferences に置き換えるには、次の手順に従います。

  1. オブジェクトへの直接参照をアセット参照に置き換えます (たとえば、public GameObject directRefMember;become  public AssetReference assetRefMember;)。
  2. 直接参照する場合と同様に、アセットを適切なコンポーネントのインスペクターにドラッグします。
  3.  Addressables API を使用して、割り当てられたアセットをロードするためのランタイム コードを追加します。
  4. ロードされたアセットが不要になったときに解放するコードを追加します。

AssetReference フィールドの使用方法の詳細については、「アセット参照」を参照してください。

アドレス可能なアセットのロードの詳細については、「アドレス可能なアセットのロード」を参照してください。

プレハブの変換

プレハブをアドレス指定可能なアセットに変換するには、インスペクター ウィンドウで[アドレス指定可能] オプションをオンにするか、プレハブを [アドレス指定可能]グループウィンドウのグループにドラッグします。

アドレス指定可能なシーンで使用する場合、必ずしもプレハブをアドレス指定可能にする必要はありません。アドレス指定可能なものには、シーンのアセットバンドルに含まれるデータの一部としてシーン階層に追加するプレハブが自動的に組み込まれます。ただし、複数のシーンでプレハブを使用する場合は、プレハブ データが使用される各シーンで重複しないように、プレハブをアドレス指定可能なアセットにする必要があります。実行時に動的にロードしてインスタンス化したい場合は、Prefab を Addressable にする必要もあります。

ノート

アドレス指定不可能なシーンでプレハブを使用する場合、Unity は、プレハブがアドレス指定可能かどうかに関係なく、プレハブ データを組み込みのシーン データにコピーします。分析ツールの[シーンをアドレス指定可能な重複依存関係にチェック]ルールを使用して、アドレス指定可能なアセット グループとアドレス指定不可能なシーン データの間で重複しているアセットを特定できます。

リソースフォルダーを変換する

プロジェクトが Resources フォルダーにアセットを読み込む場合、それらのアセットを Addressables システムに移行できます。

  1. 資産をアドレス指定可能にします。これを行うには、各アセットのインスペクター ウィンドウで[アドレス指定可能] オプションを有効にするか、アセットを[アドレス指定可能グループ]ウィンドウのグループにドラッグします。
  2.  Resources API を使用してアセットをロードするランタイム コードを、Addressables API を使用してロードするように変更します 。
  3. ロードされたアセットが不要になったときに解放するコードを追加します。

シーンと同様、以前のすべてのリソース アセットがグループ化されている場合、負荷とメモリのパフォーマンスは同等になるはずです。プロジェクトによっては、アセットを異なるグループに分割することで、パフォーマンスと柔軟性を向上させることができます。分析ツールを使用して、アセットバンドル間の不要な重複を確認します。

リソース フォルダー内のアセットをアドレス指定可能としてマークすると、システムはそのアセットをプロジェクト内の Resources_moved という新しいフォルダーに自動的に移動します。アセットを移動するためのデフォルトのアドレスは、フォルダー名を省略した従来のパスです。たとえば、読み込みコードは次のように変更される場合があります。

Resources.LoadAsync\<GameObject\>("desert/tank.prefab"); 

到着:

Addressables.LoadAssetAsync\<GameObject\>("desert/tank.prefab");.

Addressables システムを使用するようにプロジェクトを変更した後、 Resources クラスの一部の機能を別の方法で実装する必要がある場合があります。

たとえば、Resources.LoadAll関数について考えてみましょう。以前は、 Resources/MyPrefabs/ フォルダーにアセットがあり、 Resources.LoadAll<SampleType>("MyPrefabs"); を実行すると、一致するタイプのすべてのアセットが Resources/MyPrefabs/ にロードされていましたSampleTypeAddressables システムはこの機能をサポートしていませんが、  Addressableラベルを使用すると同様の結果を得ることができます。

アセットバンドルの変換

初めて[Addressables Groups]ウィンドウを開いたとき、Unity はすべての AssetBundle を Addressables Group に変換することを提案します。これは、AssetBundle 設定を Addressables システムに移行する最も簡単な方法です。Addressables APIを使用してアセットをロードおよびリリースするには、ランタイム コードを更新する必要があります 。

AssetBundle 設定を手動で変換する場合は、「無視」ボタンをクリックします。AssetBundles を Addressables に手動で移行するプロセスは、「シナリオとリソース」フォルダーで説明されているプロセスと似ています。

  1. アセットをアドレス指定可能にするには、各アセットのインスペクター ウィンドウで[アドレス指定可能]オプションを有効にするか、アセットを [アドレス指定可能グループ] ウィンドウのグループにドラッグします。Addressables システムは、アセットの既存の AssetBundle および Label 設定を無視します。
  2. AssetBundleまたはUnityWebRequestAssetBundle API を使用して アセットをロードするランタイム コードを、Addressables API を使用し てロードするように変更します。AssetBundle オブジェクト自体やアセットの依存関係を明示的にロードする必要はなく、Addressables システムがこれらの側面を自動的に処理します。
  3. ロードされたアセットが不要になったときに解放するコードを追加します。

ノート

アセットのアドレスのデフォルトのパスは、そのファイル パスです。アセットのアドレスとしてパスを使用する場合は、バンドルからロードするのと同じ方法でアセットをロードします。アドレス指定可能な資産システムは、パッケージとそのすべての依存関係の読み込みを処理します。

自動変換オプションを選択するか、アセットを同等の Addressables グループに手動で追加すると、グループ設定に応じて、同じアセットを含む同じバンドル セットが作成されます。(バンドルされたファイル自体は同一ではありません。)分析ツールを使用して、不要な重複やその他の潜在的な問題がないか確認できます。イベント ビューア ウィンドウを使用すると、アセットのロードおよびアンロードが期待どおりに動作していることを確認できます。

StreamingAssets 内のファイル

Addressables システムを使用する場合、引き続き StreamingAssets フォルダーからファイルをロードできます。ただし、このフォルダー内のファイルはアドレス指定できず、ファイルがプロジェクト内の他のアセットを参照することもできません。

Addressables システムは、ビルド時にランタイム構成ファイルとローカル AssetBundles を StreamingAssets フォルダーに配置します。(Addressables はビルド プロセスの最後にこれらのファイルを削除します。エディターには表示されません。)

おすすめ

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