協程:協同程序,在主程序運行的同時,開啓另一段邏輯處理,來協同當前程序的執行,。網絡
開啓協程的兩種方式函數
一、StartCoroutine(string methodName)spa
注意:指針
(1)、參數是方法名(字符串類型),此方法能夠包含一個參數協程
(2)、形參方法能夠有返回值對象
二、StartCoroutine(IEnumerator method)接口
注意:字符串
(1)、參數是方法名(TestMethod()),方法中能夠包含多個參數string
(2)、IEnumrator 類型的方法不能含有ref或者out 類型的參數,但能夠含有被傳遞的引用it
(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意味着協程的執行條件被知足,則可以從當前的位置繼續往下執行。不然不能從當前位置繼續往下執行。