前言
介紹我使用 Addressable 的讀取、生成、釋放方式。
詳細設定還是可以先觀看官方文件。
Event Viewer
可以利用 Event Viewer 在 Editor Runtime 時,隨時監控記憶體使用情況。就可以很明顯的發現,那些東西是忘記釋放掉的,或者不需要釋放的。
Load Asset
IEnumerator InstantiateAsset(string asset)
{
AsyncOperationHandle<GameObject> async = asset.LoadAssetAsync<GameObject>();
yield return async;
GameObject go = Instantiate(async.Result);
}
IEnumerator InstantiateAssets(string label)
{
AsyncOperationHandle<IList<GameObject>> async = Addressables.LoadAssetsAsync<GameObject>(label, null);
yield return async;
for (int i = 0; i < async.Result.Count; i++)
GameObject go = Instantiate(async.Result[i]);
}
IEnumerator InstantiateAsset(AssetReference asset)
{
AsyncOperationHandle<GameObject> async = asset.LoadAssetAsync<GameObject>();
yield return async;
GameObject go = Instantiate(async.Result);
}
可以利用這三種方式讀取 Asset,並且把物件生成出來,當然我還是最推薦使用 AssetReference,除非有什麼特殊需求要使用字串,不然我不會換成其他方式。
Release Asset
釋放掉 Asset 也記得要把物件刪除
,不然場上會遺留破圖的物件。
private void ReleaseAsset(AsyncOperationHandle<T> async)
{
Addressables.Release(async);
}
private void ReleaseAsset(T asset)
{
Addressables.Release(asset);
}
private void ReleaseAsset(AssetReference asset)
{
asset.ReleaseAsset();
}
可以利用生成的物件或者 Load asset 的 Async 釋放,假如是使用 AssetReference Load Asset,也可以使用這個方式釋放。