本文首發(fā)公眾號(hào)洪流學(xué)堂。洪流學(xué)堂快集,讓你快人幾步贡羔。
從Addressables 1.17.4-preview版本開始,加入了一個(gè)新的API个初,叫做WaitForCompletion()
可以用于將異步操作變?yōu)橥讲僮鳌?/p>
支持的Unity版本為:Unity 2019 LTS乖寒、Unity 2020 LTS和Unity 2021.1
之前版本的Addressables中,要么全部異步操作院溺,要么全部同步操作楣嘁,非常不便。現(xiàn)在這個(gè)問題解決了覆获。
具體代碼如何寫呢:
void Start()
{
//同步加載一個(gè)GameObject
var op = Addressables.LoadAssetAsync<GameObject>("myGameObjectKey");
GameObject go = op.WaitForCompletion();
//Do work...(運(yùn)行……)
Addressables.Release(op);
}
這里面要注意的是马澈,不管是同步操作還是異步,最后都得將操作給釋放弄息。Addressables.Release(op);
性能影響
咋大部分情況下痊班,同步加載的性能應(yīng)該和異步加載差不多,偶爾會(huì)出現(xiàn)更快或者更慢的情況摹量。
以下特定情況會(huì)慢得多:
第一種是 Addressables 運(yùn)行涉及大量引擎調(diào)用時(shí)涤伐,常出現(xiàn)在一次加載大量資源或體積龐大、依賴繁多的資源時(shí)缨称。速度慢的原因是 Unity 2021.1 在以同步方式運(yùn)行異步引擎接口時(shí)會(huì)在每次調(diào)用時(shí)短暫停頓一下凝果。這種停頓現(xiàn)象已在 2021.2 中移除,引擎目前處于 alpha 測(cè)試睦尽。
第二種是當(dāng) WaitForCompletion 在后臺(tái)處理大型運(yùn)算時(shí)器净,再調(diào)用其處理小型運(yùn)算。WaitForCompletion 運(yùn)算必須在引擎的任務(wù)隊(duì)列中依次完成当凡,如果小型運(yùn)算的前頭有一些大型運(yùn)算山害,則只有前邊的完成,系統(tǒng)才能完成隊(duì)列后方的運(yùn)算沿量。