概論
當不再需要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#腳本