Unity Addressables總介紹

概論

當不再需要Addressable的實例時,應通過Addressables.ReleaseInstance 釋放它,或在包含它的場景關閉時允許其自動清理,而不是通過Destroy 或DestroyImmediate 破壞其GameObject 。如果不再需要資產本身,則將其卸載。
每次通過可尋址對象加載或實例化可尋址資產時,其引用(ref)計數以及包含它的捆綁軟件的ref計數都會增加。爲了保持平衡,所有負載或實例都應具有成對的釋放。

因爲任何內容(甚至是目錄)都可以遠程存儲,並且許多因素(例如內容大小,連接速度和/或存儲介質)可以影響加載內容所需的時間,所以Addressables系統必然是異步的。開發人員可以通過三種方法來了解對Addressables的調用何時完成:回調(特別是Completed ,它返回與調用的性質有關的AsyncOperationHandle ,和CompletedTypeless ,它返回無類型的AsyncOperationHandle ),協程或AsyncAwait 。

加載或下載可尋址資產和/或其依存關係時,將對其進行緩存。標有“靜態”的AssetBundle僅下載一次。加載可尋址資產會將其放置在內存中,但不會自動實例化它。指定地址或標籤的所有依賴項也可以在必要時預加載。

傳統上,每個資產的捆綁分配都存儲在其元數據中,而與可尋址對象相關的數據則存儲在AddressableAssetsData 文件夾中。您可以在“可尋址”窗口中創建此文件夾,或者在您首次使資產可尋址時將自動創建該文件夾-通過選中檢查器中的複選框,或將其拖到“資產”組中。

開始
  • 下載
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述

配置

在這裏插入圖片描述
就會看到配置的inspector:
在這裏插入圖片描述
添加新的配置:
在這裏插入圖片描述

代碼生成實例對象

使用AssetReference生成對象

using UnityEngine;
using System.Collections;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
public class Adressables : MonoBehaviour
{
    public AssetReference objectToLoad;
    public AssetReference accessoryObjectToLoad;
    private GameObject instantiatedObject;
    private GameObject instantiatedAccessoryObject;
    // Use this for initialization
    void Start()
    {
        Addressables.LoadAssetAsync<GameObject>(objectToLoad).Completed += ObjectLoadDone;
    }
    // Update is called once per frame
    void Update()
    {
    }
    private void ObjectLoadDone(AsyncOperationHandle<GameObject> obj)
    {
        if (obj.Status == AsyncOperationStatus.Succeeded)
        {
            GameObject loadedObject = obj.Result;
            Debug.Log("Successfully loaded object.");
            instantiatedObject = Instantiate(loadedObject);
            Debug.Log("Successfully instantiated object.");
            if (accessoryObjectToLoad != null)
            {
                accessoryObjectToLoad.InstantiateAsync(instantiatedObject.transform).Completed += op =>
                {
                    if (op.Status == AsyncOperationStatus.Succeeded)
                    {
                        instantiatedAccessoryObject = op.Result;
                        Debug.Log("Successfully loaded and instantiated accessory object.");
                    }
                };
            }
        }
    }
}

對要加載的物體勾選可尋址選項:

在這裏插入圖片描述
我這裏講自帶的兩個預製體物體打上了√
在這裏插入圖片描述

新建場景做加載測試

在攝像機上面掛載剛剛寫的c#腳本
在這裏插入圖片描述

選擇好需要加載的物品:

在這裏插入圖片描述

運行遊戲:

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章