Addressableでラベルを使って複数のアセットバンドルを一括で読み込みたい
ラベル設定
ラベルの管理画面を開く
方法は2通りある。
Groupsの画面のラベル設定のところから開く方法
GroupsのToolsからLabelsを選択して開く方法
ラベルの作成
管理画面上で+を押すと新規作成できる。
注意点
ラベルで読み込む場合とアドレスで読み込む場合に、同じメソッドを使うので、アドレスとラベルが被らないように注意すること。
ラベルを設定する
Groupsの画面でラベルを設定できる。
読み込みコードを書く
サンプルコード
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.ResourceManagement.AsyncOperations; public class LoadAsset : MonoBehaviour { IList<GameObject> list; void Start() { StartCoroutine(Load()); } IEnumerator Load() { //アセットのロード var handle = Addressables.LoadAssetsAsync<GameObject>("Title", null); yield return handle; //成功時 if (handle.Status == AsyncOperationStatus.Succeeded) { list = handle.Result; foreach (var value in list) { Debug.Log(value.name); } } } }
出力結果
TitleImage Button
使用するメソッド
Addressables.LoadAsset(s)Async | Addressables | 1.13.1
Addressables.LoadAssetsAsync<オブジェクトの型>("ラベル名", Action); 戻り値:AsyncOperationHandle<オブジェクトの型>
注意点:LoadAssetsAsync 複数形になってるので注意。単数だと一つずつ読み込むメソッドになる。
引数について
サンプルコードのようにコルーチンを使う場合は第二引数はnullにする。
デリゲート使う場合は適宜設定する。
読み込まれたアセットバンドルを取得するには
以下のプロパティを参照する。
AsyncOperationHandle<オブジェクトの型>.Result 値:IList<オブジェクトの型>
注意点:Listではなく、IListで返される。
違う型を同じラベルに設定した場合、型指定はどうなる?
GameObjectとAudioClipを同じラベルに設定した場合、型指定を<GameObject>
にすると、GameObject型のアセットバンドルのみがリスト化される。
なので、読み込むときは同じラベルの中の同じ型のオブジェクトごとに読み込むことになる。
ラベル?アドレス?Path?name?
違いがわかりにくく、ごっちゃになってきたので整理。
ラベル:読み込みメソッドに渡す引数で、同じラベルで同じ型なら一括読み込みできる。
アドレス:読み込みメソッドに渡す引数で、同じアドレスで同じ型なら一括読み込みできる。
Path:アセット内の保存場所
名前:そのオブジェクトにつけられた名前
検証
例えば、こんな感じで作ってみた。
画像とボタンをプレハブにして、AssetBundlesというフォルダに入れる。
それぞれにAdressという同じアドレスをつける。
それぞれにLabelという同じラベルをつける。
Pathの欄に表示されているのはこの保管場所になっているのがわかる。
"Adress"というアドレス名で読み込んで名前をコンソールに表示してみる。
IList<GameObject> list; void Start() { StartCoroutine(Load()); } IEnumerator Load() { //アセットのロード var handle = Addressables.LoadAssetsAsync<GameObject>("Adress", null); yield return handle; //成功時 if (handle.Status == AsyncOperationStatus.Succeeded) { list = handle.Result; foreach (var value in list) { Debug.Log(value.name); } } }
それぞれのプレハブ名が表示された。
以上