Unity協程Coroutine使用總結和一些坑


原文摘自 

Unity協程Coroutine使用總結和一些坑

MonoBehavior關於協程提供了下面幾個接口:

 

 

可以使用函數或者函數名字符串來啟動一個協程,同時可以用函數,函數名字符串,和Coroutine對象來終止一個協程。

使用上有這幾種問題:

1,使用 Coroutine StartCoroutine(IEnumerator routine)來啟動一些協程,能否使用StopCoroutine(string methodName) 和StopCoroutine(Coroutine routine);StopCoroutine(IEnumerator routine)來結束對應的協程:

答案:StopCoroutine(string methodName)不能

能否用StopCoroutine(IEnumerator routine)來終止對應的協程?

需要使用IEnumerator tempEnum把協程方法保存下來,然后調用來StopCoroutine(tempEnum)終止

2,使用StartCoroutine(string methodName)來啟動的協程,能否使用StopCoroutine(Coroutine routine)和StopCoroutine(IEnumerator routine)來結束對應的協程:

答案:不能 

StopCoroutine(Coroutine routine)肯定不行了,沒有Coroutine對象

3, Coroutine StartCoroutine(IEnumerator routine)可以將一個非MonoBehavior對象里的IEnumerator傳入,在當前Mono對象里管理啟動這個協程。

但是StartCoroutine(string methodName)不能將非MonoBeahvior對象里的函數名串作為參數來啟動協程,因為StartCoroutine(string methodName)是在當前Mono對象下匹配對應的函數名字

4,Coroutine StartCoroutine(IEnumerator routine)來啟動多個協程 Coroutine1和Coroutine2,分別使用StopCoroutine(Coroutine )來終止對應的協程

5,調用StartCoroutine(string methodName)多次來啟動多個協程,使用StopCoroutine(string methodName) 一次可以終止所有的該協程函數

雖然unity文檔上是這么說的:

 

 

但實際上會把所有叫做methodName的協程都取消掉,源碼里也是這么做的

源碼不便分享,需要請私信


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM