Unity協程佇列,順序分幀處理

2021-09-30 18:35:56 字數 679 閱讀 8635

遊戲開發過程中經常會遇到要載入一片場景資源的情況,先不考慮如何載入的情況,對於一大片場景的載入和顯示,如果在一幀內完成的話,對效能會有很大的小號,造成瞬間幀率下降,產生效能峰值。

一般這種不需要實時性的載入都會分幀處理,把壓力平攤下去,為了使載入過程更加平滑與受控,博主寫乙個協程佇列去控制我們載入過程中協程的呼叫順序與次數,更好的平滑我們的載入過程。

因為這裡協程的呼叫是使用迭代器的movenext,並非呼叫startcoroutine開啟動迭代器,所以無法實現計時器的功能(waitforseconds),僅支援yield return null,能夠滿足此條件的才能使用該指令碼,同時這種實現方法也帶來效能優勢,減少每次呼叫一次startcoroutine都會帶來24b的記憶體消耗,若開啟協程很平凡,這個消耗還是很明顯的。

使用方法是找個gameobject掛載coroutinemanager指令碼,需要管理的協程通過coroutinemanager.enqueuework方法加到協程佇列,下面原始碼中也有測試**。

協程佇列處理:

enqueuework(test1());

enqueuework(test3());

正常開啟協程:

startcoroutine(test1());

startcoroutine(test3());

可以看出,使用協程佇列可以更加平滑而且容易控制的去控制協程。

Unity 協程詳解

class myiter ienumerable myiter iter newmyiter foreach int num in iter 我們需要讓資料結構支援foreach遍歷,所以要繼承ienumerable介面,實現getenumerator方法返回乙個迭代器,那麼這裡就很奇怪,返回值明明...

Unity 之 協程 初級

協程可以通過startcoroutine 來呼叫 只需要在裡面穿進去乙個ienumerator型別的方法 就可以了。這個方法是可以帶有引數的哦。舉個例子 ienumerator test2 void start 這樣就在一開始呼叫這個test2的方法了 現在我來著重講講最讓人煩心的yield ret...

Unity中的協程

1.建立協程 迭代器 ienumerator private ienumerator test 裡面可以使用 yield return new waitforsecond 1 等待1s後執行後面的 yield return new waitforseconds 0.3f 等待0.3秒,一段指定的時間...