如何正確理解unity中的協程 yield?以及它的正確適用情形?

時間 2021-06-04 06:03:46

1樓:啊左

協程個人的理解是迭代器的一種靈活運用

最重要的是yield得理解

yield(C# 參考)

可以這樣假想,unity生命週期中(就是迴圈呼叫start,update,fixupdate等等的那一層)在呼叫這些生命週期函式中,存在乙個不停迴圈執行這個迭代器的方法。

可能的結構類似於

IEnumerator MoveNext()

申明了乙個協程(迭代器)

IEnumerator GetEnumerator()

yield return null;

Console.WriteLine("something");

yield return null;

在unity底層可以想像大概是這樣用

IEnumerator a=GetEnumerator();

if(a.MoveNext())

a.Current;

MoveNext()執行的是GetEnumerator()中,上下兩段yield裡的內容,而Current是yield的返回值。

unity每一幀都按照這樣的邏輯執行一次,只到yield到達函式底端。unity本身是會根據返回值來,處理下一次呼叫協程的時間。

return null 表示的是從當前幀跳出,準確的是Unity 協程與執行緒說的lateUpdate()之後;

但是還有很多返回值會改變跳出的位置,導致下次執行的時候會更早或者更晚執行

感興趣的可以自己嘗試一下。

yield return new WaitForFixedUpdate(); 是在fixupdate 執行完之後。update執行之前

yield return new WaitForEndOfFrame();是GUi執行完之後執行

具體可以再去看官方的untiy生命週期的介紹圖。還有這幾個返回值的的解釋

如何正確理解半衰期?

李正陽 假設世界上分布著1000個原子,每個原子每過1秒都有50 的概率衰變,那麼 1秒後 衰變了接近500個原子,還剩500個原子2秒後 還剩250個原子 3秒後 還剩125個原子 以此類推,1秒就是這個原子的半衰期。也可以這麼理解,連續投擲1000枚硬幣,留下投擲結果為正面的硬幣,去掉反面的硬幣...

如何正確理解群論中的同態基本定理?

尤拉 其實老直觀了,其結論的直觀性下面的回答一抓一大把,這裡說一下證明思路有多自然 直白 現在,你有乙個同態 G H,它要是個雙射,也就是個同構那是最好。但萬一它不單不滿咋辦?創造唄!我們知道,乙個同態是單的充要條件是ker 萬一ker 有多個元素咋辦?管他,直接重新構造乙個群,把ker 當么元就行...

如何正確理解訊號處理中的負頻率?

la啦 要找到負頻率成分的物理意義,首先要看這個訊號中虛部的物理意義。比如說對於光 電磁波 來說,認為 訊號的實部表示某點某方向上的時域電場,那麼虛部可以認為是時域磁場。對於真空中的單色 頻 平面波來說,這時,這個時域訊號的實部和虛部是正交的 數值上 傅利葉變換結果為正或者負的乙個單位衝激函式。此時...