facebook twitter hatena line email

Unity/Addressable/複数ロード

提供: 初心者エンジニアの簡易メモ
移動: 案内検索

準備

複数まとめてロードするには、Labelsの機能を使う

  1. Unityメインメニュー/Window/Asset Management/Addressables/Groupsを選択
  2. ロードしたいオブジェクトのLabels部分にラベル名を追加(例:"TestLabel")

サンプル

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.UI;

public class AssetLabelsLoadScene : MonoBehaviour
{
    [SerializeField]
    Button clearButton;
    [SerializeField]
    Button loadButton;
    [SerializeField]
    Button unloadButton;
    [SerializeField]
    GameObject canvas;
    IList<GameObject> instances;
    IList<GameObject> list;
    void Start()
    {
        clearButton.onClick.AddListener(() => {
            Caching.ClearCache();
        });
        loadButton.onClick.AddListener(() => {
            if (instances == null)
            {
                instances = new List<GameObject>();
                StartCoroutine(Load());
            }
        });
        unloadButton.onClick.AddListener(() => {
            foreach (var instance in instances)
            {
                Destroy(instance);
                Addressables.ReleaseInstance(instance); // 破棄
            }
            instances = null;
        });
    }
    IEnumerator Load()
    {
        var handle = Addressables.LoadAssetsAsync<GameObject>("TestLabel", null);
        yield return handle;
        if (handle.Status == AsyncOperationStatus.Succeeded)
        {
            list = handle.Result;
            foreach (var value in list)
            {
                Debug.Log(value.name);
                var instance = Instantiate(value, canvas.transform);
                instances.Add(instance);
            }
        }
    }
}

実行に失敗する場合は、Addressablesを再ビルドしてるか確認する

参考:https://robamemo.hatenablog.com/entry/2021/01/09/102629