協(xié)程
使用 StartCoroutine 和 IEnumerator
yield return null 暫停執(zhí)行并隨后在下一幀恢復(fù)
yield return new WaitForSeconds(1f); 延遲1秒
waitfor系列有好幾個(gè)
WaitForSeconds 和 WaitForSecondsRealtime 的區(qū)別
使用縮放時(shí)間將協(xié)程執(zhí)行暫停指定的秒數(shù)。
實(shí)際暫停時(shí)間等于給定時(shí)間除以 Time.timeScale。如果要使用未縮放時(shí)間進(jìn)行等待,請(qǐng)參閱 WaitForSecondsRealtime。在協(xié)程中,WaitForSeconds 只能與 yield 語(yǔ)句結(jié)合使用。
有一些因素可能意味著實(shí)際等待的時(shí)間量與指定的時(shí)間量不完全一致。
1 在當(dāng)前幀的 end 處開(kāi)始等待。如果您在一個(gè)非常長(zhǎng)的幀(例如,具有同步加載等阻止主線程的長(zhǎng)時(shí)間操作的幀)上使用持續(xù)時(shí)間“t”啟動(dòng) WaitForSeconds,協(xié)程將在幀結(jié)束后返回“t”秒,而不是取消后“t”秒。
2 允許協(xié)程在“t”秒后繼續(xù)在第一幀上執(zhí)行,不是確切的“t”秒之后。
WaitForEndOfFrame
等待,直到該幀結(jié)束,在 Unity 渲染每一個(gè)攝像機(jī)和 GUI 之后,在屏幕上顯示該幀之前。
可以用它將顯示內(nèi)容讀取到紋理中,將其編碼為圖像文件(請(qǐng)參閱 Texture2D.ReadPixels 和 Texture2D.Texture2D),并將其存儲(chǔ)在設(shè)備上。
從 Game 視圖切換到 Scene 視圖將導(dǎo)致 WaitForEndOfFrame 凍結(jié)。它只在應(yīng)用程序切換回 Game 視圖時(shí)才會(huì)繼續(xù)。只有當(dāng)應(yīng)用程序在 Unity 編輯器中運(yùn)行時(shí)才會(huì)發(fā)生這種情況。
注意:在批處理模式下,不會(huì)在編輯器上調(diào)用此協(xié)程。如需了解更多詳細(xì)信息,請(qǐng)參閱手冊(cè)中的命令行參數(shù)頁(yè)面。
WaitWhile 直到提供的委托評(píng)估為 false
WaitUntil 直到提供的委托評(píng)估為 true
注意:可以使用 StopCoroutine 和 StopAllCoroutines 來(lái)停止協(xié)程。 當(dāng)用 SetActive(false) 禁用某個(gè)協(xié)程所附加到的游戲?qū)ο髸r(shí),該協(xié)程也將停止。調(diào)用 Destroy(example)(其中 example 是一個(gè) MonoBehaviour 實(shí)例)會(huì)立即觸發(fā) OnDisable,并會(huì)處理協(xié)程,從而有效地停止協(xié)程。最后,在幀的末尾調(diào)用 OnDestroy。
通過(guò)在 MonoBehaviour 實(shí)例上將 enabled 設(shè)置為 false 來(lái)禁用 MonoBehaviour 時(shí),協(xié)程不會(huì)停止。
協(xié)程的缺點(diǎn)就是
他必須依賴 Monobehavior
Unity Task
相比 協(xié)程 Unity 的 Task 更加靈活
看例子文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-474826.html
void Start()
{
Debug.Log("1 : " + Thread.CurrentThread.ManagedThreadId);
this.aaa();
Debug.Log("2 : " + Thread.CurrentThread.ManagedThreadId);
}
async void aaa()
{
Debug.Log("3 : " + Thread.CurrentThread.ManagedThreadId);
await Task.Run(() =>
{
Debug.Log("5 : " + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(3000);
Debug.Log("6 : " + Thread.CurrentThread.ManagedThreadId);
});
Debug.Log("4 : " + Thread.CurrentThread.ManagedThreadId);
}
你會(huì)發(fā)現(xiàn) Task.Run 里面的內(nèi)容是單獨(dú)id 也就是 5 和 6
其他所有的都是主線程id文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-474826.html
到了這里,關(guān)于Unity 協(xié)程 Unity Task UniTask的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!