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

    Addressables システムの概要

    Addressables は、プロジェクトとともに拡張できるシステムです。最初は単純な設定から始め、その後、プロジェクトの複雑さが増し、チームの規模が大きくなるにつれて再編成することができます。これはすべて最小限のコード変更で達成できます。

    例えば、最初は Addressable (アドレス指定可能) アセットのグループを 1 つ使用します。これは Unity で 1 つのまとまりとしてロードされます。その後コンテンツを追加し、アセットを複数のグループに分割すると、その時点で必要なものだけをロードできます。また、チームの規模が大きくなるにつれ、さまざまなタイプのアセットを開発する別々の Unity プロジェクトを作成することもできます。このような補助的プロジェクトで、メインプロジェクトからロードされる Addressables コンテンツビルドを独自に生成できます (ここでもコードの変更は最小限で済みます)。

    この概要では、Addressables システムによるアセットの管理方法と使用方法の理解を助けるために、以下の概念について説明します。

    • アセットアドレス: Addressable アセットを特定する文字列 ID。アドレスをキーとして使用してアセットをロードすることができます。
    • AssetReference: Inspector ウィンドウでの Addressable アセットのフィールドへの割り当てをサポートするために使用する型。AssetReference インスタンスをキーとして使用してアセットをロードすることができます。AssetReference クラスには、ロード用の独自のメソッドも用意されています。
    • ラベル: 複数のアセットに割り当て、関連するアセットをグループにまとめてロードするために使用できるタグ。ラベルをキーとして使用してアセットをロードすることができます。
    • アセットの場所: アセットのロード方法と依存関係を説明するランタイムオブジェクト。場所オブジェクトをキーとして使用してアセットをロードすることができます。
    • キー: 1 つ以上の Addressable を特定するオブジェクト。キーには、アドレス、ラベル、AssetReference インスタンス、場所オブジェクトなどがあります。
    • アセットのロードとアンロード: Addressables API は、ランタイムにアセットのロードと解放を行う独自の関数を提供しています。
    • 依存関係: アセットの依存関係とは、別のアセットによって使用されるアセットを示します。例えば、ブレハブはシーンアセットで使用され、マテリアルはプレハブアセットで使用されます。
    • 依存関係とリソースの管理: Addressables システムでは、参照カウントを使用して、どのアセットと AssetBundle が使用中であるかを追跡します。これには、システムが依存関係 (参照される他のアセット) をロードまたはアンロードする必要があるかどうかも含まれます。
    • グループ: アセットは、エディターでグループに割り当てます。グループ設定によって、Addressables でグループアセットがどのように AssetBundle にパッケージ化され、ランタイムにどのようにロードされるかが決まります。
    • コンテンツカタログ: Addressables では、カタログを使用して、アセットを、そのアセットを含むリソースにマップします。
    • コンテンツビルド: Addressables の使用時には、プレイヤービルドを作成する前に、別のステップとしてコンテンツビルドを作成します。コンテンツビルドは、アセットを照合してパッケージ化したものです。
    • 複数のプラットフォームのサポート: ビルドシステムは、ビルドされたコンテンツをプラットフォームごとに分け、適切なパスをランタイムに解決します。
    • Addressables ツール: Addressables パッケージには、コンテンツの編成、ビルド、最適化を行うためのいくつかのウィンドウとツールが含まれています。

    デフォルトでは、Addressables は AssetBundle を使用してアセットをパッケージ化します。独自の IResourceProvider クラスを実装して、アセットにアクセスする他の方法をサポートすることもできます。

    アセットアドレス

    Addressables の主要な機能の 1 つは、ユーザーがアセットに割り当てたアドレスを使用してランタイムにアセットをロードすることです。Addressables リソースマネージャーは、コンテンツカタログでアドレスを検索して、アセットの格納場所を特定します (アセットは、アプリケーションへの組み込み、ローカルでのキャッシュ、リモートでのホストが可能です)。リソースマネージャーは、アセットとすべての依存関係をロードし、必要に応じて最初にコンテンツをダウンロードします。


    Addressables では、アセットがどこにあるかにかかわらず、アドレスによってアセットがロードされます

    アドレスはアセットの物理的な場所に結び付いているわけではないため、Unity エディターでもランタイムでも、アセットの管理と最適化を行うときの柔軟性が高まります。アドレスを物理的な場所にマップするのは カタログ です。

    通常、アセットには一意のアドレスを割り当てますが、アセットのアドレスが一意である必要はありません。その方が便利なら、同じアドレス文字列を複数のアセットに割り当てることができます。例えば、アセットのバリアントがある場合は、すべてのバリアントに同じアドレスを割り当て、バリアントを区別するにはラベルを使用できます。

    • アセット 1: アドレス: "plate_armor_rusty"、ラベル: "hd"
    • アセット 2: アドレス: "plate_armor_rusty"、ラベル: "sd"

    LoadAssetAsync など、1 つのアセットのみをロードする Addressables API 関数を、複数のアセットに割り当てられているアドレスを指定して呼び出すと、最初に見つかったインスタンスがロードされます。LoadAssetsAsync などの他の関数では、1 回の操作で複数のアセットのロードが可能で、指定されたアドレスを持つすべてのアセットがロードされます。

    Tip

    LoadAssetsAsync の MergeMode パラメーターを使用すると、2 つのキーの共通部分をロードできます。

    上の例では、"plate_armor_rusty" というアドレスと "hd" というラベルをキーとし、マージモードとして共通部分を指定して、"アセット 1" をロードできます。ラベルの値を "sd" に変更すると、"アセット 2" をロードできます。

    アセットにアドレスを割り当てる方法の詳細については、[アセットの Addressable 指定] を参照してください。

    アドレスなどのキーによってアセットをロードする方法の詳細については、[アセットのロード] を参照してください。

    AssetReference

    AssetReference は、あらゆる種類の Addressable アセットを参照するように設定できる型です。参照に割り当てられたアセットが Unity によって自動的にロードされることはありません。このため、アセットのロードとアンロードのタイミングは開発者が柔軟に制御できます。

    MonoBehaviour や ScriptableObject で AssetReference 型のフィールドを使用すると、(アドレスを指定する文字列を使用せずに) そのフィールドに使用する Addressable アセットを指定できます。AssetReference はドラッグアンドドロップとオブジェクトピッカーの割り当てをサポートしているため、エディターのインスペクターで特に役立ちます。

    Addressables には、基本の AssetReference 型に加えて、AssetReferenceGameObject や AssetReferenceTexture などの特化された型もいくつか用意されています。これらの特化されたサブクラスは、不適切なタイプのアセットが AssetReference フィールドに割り当てられる可能性を排除するために使用できます。さらに、AssetReferenceUILabelRestriction 属性を使用すると、特定のラベルを持つアセットが割り当てられるように制限できます。

    詳細については、[AssetReference の使用] を参照してください。

    アセットのロードと解放

    Addressable アセットをロードするには、アセットのアドレスを使用するか、ラベルや AssetReference などの他のキーを使用できます。詳細については、[Addressable アセットのロード] を参照してください。ロードする必要があるのは、メインのアセットのみです。依存アセットは、Addressables により自動的にロードされます。

    ランタイムにアプリケーションから Addressable アセットにアクセスする必要がなくなったら、そのアセットを解放して、関連付けられているメモリを解放できるようにする必要があります。Addressables システムは、ロードされたアセットの参照カウントを保持しています。アセットは、参照カウントがゼロに戻るまでアンロードされません。したがって、アセットやその依存関係がまだ使用中かどうかを開発者が追跡する必要はありません。必要なのは、アセットを明示的にロードしたら、そのインスタンスがアプリケーションで不要になったときに確実に解放することだけです。詳細については、[Addressable アセットの解放] を参照してください。

    依存関係とリソースの管理

    Unity 内のアセットは、別のアセットに依存する場合があります。シーンは 1 つ以上のプレハブを参照することがあり、プレハブは 1 つ以上のマテリアルを使用することがあります。同じマテリアルが複数のプレハブで使用され、それらのプレハブが複数の AssetBundle に存在する場合もあります。Addressable アセットをロードすると、そのアセットが参照する依存アセットがすべて自動的に検索され、ロードされます。システムでアセットがアンロードされるときには、別のアセットによって使用されていない限り、依存アセットもアンロードされます。

    アセットのロードと解放を行うと、Addressables システムによって各アイテムの参照カウントが記録されます。アセットが参照されなくなると、Addressables によってアンロードされます。そのアセットが含まれていたバンドル内のアセットがすべて使用中でなくなった場合は、バンドルもアンロードされます。

    詳細については、[メモリ管理] を参照してください。

    Addressables グループおよびラベル

    コンテンツを編成するには、Addressables グループを使用します。すべての Addressable アセットはグループに属しています。アセットを明示的にグループに割り当てない場合は、デフォルトグループに追加されます。

    グループ設定では、Addressables ビルドシステムがグループ内のアセットをバンドルにパッケージ化する方法を指定できます。例えば、グループ内のすべてのアセットを 1 つの AssetBundle ファイルにパックするかどうかを選択できます。

    何らかの方法でまとめて扱う必要のあるコンテンツにタグを付けるには、ラベルを使用します。例えば、"red" (赤)、"hat" (帽子)、"feather" (羽根) というラベルが定義されている場合は、羽根付きの赤い帽子をすべて 1 回の操作でロードできます。それらが同じ AssetBundle に属しているかどうかは問いません。さらに、ラベルは、グループ内のアセットをバンドルにパックする方法を決定するためにも使用できます。

    グループにアセットを追加し、グループ間でアセットを移動するには、Addressables Groups ウィンドウを使用します。Groups ウィンドウ内のアセットにラベルを割り当てることもできます。

    グループスキーマ

    グループ内のアセットをビルドするときに使用される設定は、グループに割り当てられたスキーマによって定義されます。さまざまなスキーマで、さまざまな設定のグループを定義できます。例えば、標準スキーマの中には、アセットを AssetBundle にパックして圧縮する方法に関する設定を (他のオプションとともに) 定義するものがあります。別の標準スキーマでは、グループ内のアセットが "Can Change Post Release" (リリース後に変更可能) と "Cannot Change Post Release" (リリース後に変更不可) のどちらのカテゴリに属するかを定義します。

    独自のスキーマを定義してカスタムビルドスクリプトで使用することができます。

    グループスキーマの詳細については、[スキーマ] を参照してください。

    コンテンツカタログ

    Addressables システムでは、アセットのアドレスをその物理的な場所にマップするコンテンツカタログファイルが生成されます。また、カタログのハッシュ (数学的な指紋のようなもの) を格納するハッシュファイルも作成されます。Addressable アセットをリモートでホストしている場合、システムはこのハッシュファイルを使用して、コンテンツカタログが変更されていてダウンロードが必要かどうかを判別します。詳細については、[コンテンツカタログ] を参照してください。

    コンテンツカタログ内のアドレスがどのようにリソースロードパスにマップされるかは、コンテンツビルドの実行時に選択したプロファイルによって決定されます。詳細については、[プロファイル] を参照してください。

    コンテンツのリモートホスティングの詳細については、[コンテンツのリモート配布] を参照してください。

    コンテンツビルド

    Addressables システムでは、Addressable コンテンツと、プレイヤーのビルドが分離されています。コンテンツビルドにより、コンテンツカタログとカタログハッシュ、およびアセットを含む AssetBundle が生成されます。

    アセットの形式はプラットフォームごとに異なるため、プレイヤーをビルドする前に、各プラットフォーム用のコンテンツビルドを作成する必要があります。

    詳細については、[Addressable コンテンツのビルド] を参照してください。

    再生モードスクリプト

    エディターの再生モードでゲームまたはアプリケーションを実行するときに、再生ボタンを押す前に常にコンテンツビルドを実行するのが不便であったり、時間がかかったりする場合があります。同時に、ゲームはできるだけビルド済みのプレイヤーに近い状態で実行することが望ましいと言えます。柔軟性を高めるために、Addressables システムが再生モードでアセットを特定してロードする方法は、以下の 3 つのオプションから選択できます。

    • Use the Asset database (アセットデータベースの使用): アセットをアセットデータベースから直接ロードします。このオプションは、通常、コードとアセットの両方が変更されている場合にイテレーション速度が最速になりますが、本番ビルドとは最も異なります。
    • Simulate groups (グループのシミュレーション): グループをシミュレートしながらアセットをロードします。このオプションは、Addressables グループ自体の編成と最適化を行っている場合に役立ちます。変更のたびにフルコンテンツの再ビルドを行うことなく、Addressables イベントが提供されます。
    • Use existing build (既存のビルドの使用): 最後のコンテンツビルドからコンテンツをロードします。このオプションは本番ビルドに最も近く、アセットを変更していない場合はイテレーション速度が高速になります。

    詳細については、[再生モードスクリプト] を参照してください。

    複数のプラットフォームのサポート

    Addressables は、複数のプラットフォームに対応するプロジェクトをサポートしています。そのために、ビルドパスにターゲットプラットフォーム名を含め、プレイヤービルドの作成時に、適切なプラットフォームファイルが StreamingAssets フォルダーにコピーされるようにしています。

    Addressables ツール

    Addressables システムには、Addressable アセットの管理に役立ついくつかのツールとウィンドウが用意されています。

    • [Addressable Groups ウィンドウ]: Groups ウィンドウは、アセットとグループ設定を管理し、ビルドを作成するためのメインインターフェースです。
    • [Profiles ウィンドウ]: ビルドで使用されるパスの設定に使用します。
    • [Addressables イベントビューアー]: Addressable アセットに関連するランタイムイベントを監視し、プロファイルします。
    • [Analyze ツール]: Analyze ツールは、定義されたルールのセットに Addressables コンテンツが適合するかどうかを検証する分析ルールを実行します。Addressables システムには、重複アセットがないかの検証などの基本的なルールがいくつか用意されています。AnalyzeRule クラスを使用して独自のルールを追加することもできます。
    • [Hosting ツール]: Hosting ツールは、Unity エディターから実行されるシンプルなアセットホスティングサービスを提供します。プロジェクトの開発とテストに役立ちます。
    • [Build Layout レポート]: コンテンツビルドにより作成された AssetBundle の説明が含まれます。
    トップに戻る
    Copyright © 2023 Unity Technologies — 商標と利用規約
    • 法律関連
    • プライバシーポリシー
    • クッキー
    • 私の個人情報を販売または共有しない
    • Your Privacy Choices (Cookie Settings)