C#協程的用法。
協程:協同程序,在主程序運行的同時,開啟另外一段邏輯處理,來協同當前程序的執行,。
開啟協程的兩種方式
1、StartCoroutine(string methodName)
注意:
(1)、參數是方法名(字符串類型),此方法可以包含一個參數
(2)、形參方法可以有返回值
2、StartCoroutine(IEnumerator method)
注意:
(1)、參數是方法名(TestMethod()),方法中可以包含多個參數
(2)、IEnumrator 類型的方法不能含有ref或者out 類型的參數,但可以含有被傳遞的引用
(3)、必須有有返回值,且返回值類型為IEnumrator,返回值使用(yield retuen +表達式或者值,或者 yield break)語句
終止協程的兩種方式:
StopCoroutine (string methodName),只能終止指定的協程
使用時注意:
在程序中調用StopCoroutine() 方法只能終止以字符串形式啟動的協程
StopAllCoroutine(),終止所有協程
yield:掛起,程序遇到yield關鍵字時會被掛起,暫停執行,等待條件滿足時從當前位置繼續執行
yield return 0 or yield return null:程序在下一幀中從當前位置繼續執行
yield return 1,2,3,......: 程序等待1,2,3...幀之后從當前位置繼續執行
yield return new WaitForSeconds(n):程序等待n秒后從當前位置繼續執行
yield new WaitForEndOfFrame():在所有的渲染以及GUI程序執行完成后從當前位置繼續執行
yield new WaitForFixedUpdate():所有腳本中的FixedUpdate()函數都被執行后從當前位置繼續執行
yield return WWW:等待一個網絡請求完成后從當前位置繼續執行
yield return StartCoroutine():等待一個協程執行完成后從當前位置繼續執行
yield break
如果使用yield break語句,將會導致協程的執行條件不被滿足,不會從當前的位置繼續執行程序,而是直接從當前位置跳出函數體,回到函數的根部
協程的執行原理
協程函數的返回值時IEnumerator,它是一個迭代器,可以把它當成執行一個序列的某個節點的指針,它提供了兩個重要的接口,分別是Current(返回當前指向的元素)和MoveNext()(將指針向后移動一個單位,如果移動成功,則返回true)
yield關鍵詞用來聲明序列中的下一個值或者是一個無意義的值,如果使用yield return x(x是指一個具體的對象或者數值)的話,那么MoveNext返回為true並且Current被賦值為x,如果使用yield break使得MoveNext()返回為false
如果MoveNext函數返回為true意味着協程的執行條件被滿足,則能夠從當前的位置繼續往下執行。否則不能從當前位置繼續往下執行。