function StartCoroutine (routine : IEnumerator) : Coroutine
描述:开始协同程序。
一个协同程序在执行过程中,可以在任意位置使用yield语句。yield的返回值控制何时恢复协同程序向下执行。协同程序在对象自有帧执行过程中堪称优秀。协同程序在性能上没有更多的开销。StartCoroutine函数是立刻返回的,但是yield可以延迟结果。直到协同程序执行完毕。
用javascript不需要添加StartCoroutine,编译器将会替你完成.但是在C#下,你必须调用StartCoroutine。
// 此例演示如何调用协同程序和它的执行 using UnityEngine; using System.Collections; public class example : MonoBehaviour
{ void Start() { // 先打印"Starting 0.0"和"Before WaitAndPrint Finishes 0.0"两句,2秒后打印"WaitAndPrint 2.0" print("Starting " + Time.time); // 协同程序WaitAndPrint在Start函数内执行,可以视同于它与Start函数同步执行. StartCoroutine(WaitAndPrint(2.0F)); print("Before WaitAndPrint Finishes " + Time.time); } IEnumerator WaitAndPrint(float waitTime) { // 暂停执行waitTime秒 yield return new WaitForSeconds(waitTime); print("WaitAndPrint " + Time.time); } } // - After 0 seconds, prints "Starting 0.0" // - After 0 seconds, prints "Before WaitAndPrint Finishes 0.0" // - After 2 seconds, prints "WaitAndPrint 2.0"
另一个例子:
// 在这个例子中我们演示如何调用协同程序并直到它执行完成. using UnityEngine; using System.Collections; public class example : MonoBehaviour { IEnumerator Start() { // 0秒时打印"Starting 0.0",2秒后打印"WaitAndPrint 2.0"和"Done 2.0" print("Starting " + Time.time); // 运行WaitAndPrint直到完成 yield return StartCoroutine(WaitAndPrint(2.0F)); print("Done " + Time.time); } IEnumerator WaitAndPrint(float waitTime) { // 等待waitTime秒 yield return new WaitForSeconds(waitTime); print("WaitAndPrint " + Time.time); } } // - After 0 seconds, prints "Starting 0.0" // - After 2 seconds, prints "WaitAndPrint 2.0" // - After 2 seconds, prints "Done 2.0"
• function StartCoroutine (methodName : string, value : object = null) : Coroutine
描述: 开始一个叫methodName的协同程序.
很多情况下,我们会用到StartCoroutine的一个变体。使用有字符串方法名的StartCoroutine允许你用StopCoroutine去停止它。其缺点就是会有较高的性能开销,而且你只能传递一个参数。
// 这个例子演示如何调用一个使用字符串名称的协同程序并停掉它 using UnityEngine; using System.Collections; public class example : MonoBehaviour
{ IEnumerator Start()
{ StartCoroutine("DoSomething", 2.0F); yield return new WaitForSeconds(1); StopCoroutine("DoSomething"); } IEnumerator DoSomething(float someParameter)
{ while (true)
{ print("DoSomething Loop"); // 停止协同程序的执行并返回到主循环直到下一帧. yield return null; } } }