public Coroutine StartCoroutine (IEnumerator routine);

描述

启动一个协同程序。

可以使用 yield 语句在任意执行点暂停协同程序的执行。 yield 返回值指定何时恢复该协同程序。 当在多个帧上对行为建模时,协同程序是您的理想选择。 协同程序几乎没有性能开销。 StartCoroutine 函数始终立即返回,但您可以 yield 结果。 这将等待该协同程序执行完毕。无法保证协同程序按其启动顺序结束, 即使它们在同一帧中完成也是如此。

StartCoroutine 的示例:

using UnityEngine;
using System.Collections;

// In this example we show how to invoke a coroutine and // continue executing the function in parallel.

public class ExampleClass : MonoBehaviour { // In this example we show how to invoke a coroutine and // continue executing the function in parallel.

private IEnumerator coroutine;

void Start() { // - After 0 seconds, prints "Starting 0.0" // - After 0 seconds, prints "Before WaitAndPrint Finishes 0.0" // - After 2 seconds, prints "WaitAndPrint 2.0" print("Starting " + Time.time);

// Start function WaitAndPrint as a coroutine.

coroutine = WaitAndPrint(2.0f); StartCoroutine(coroutine);

print("Before WaitAndPrint Finishes " + Time.time); }

// every 2 seconds perform the print() private IEnumerator WaitAndPrint(float waitTime) { while (true) { yield return new WaitForSeconds(waitTime); print("WaitAndPrint " + Time.time); } } }

另一个示例:

// In this example we show how to invoke a coroutine and wait until it
// is completed

using UnityEngine; using System.Collections;

public class ExampleClass : MonoBehaviour { IEnumerator Start() { // - After 0 seconds, prints "Starting 0.0" // - After 2 seconds, prints "WaitAndPrint 2.0" // - After 2 seconds, prints "Done 2.0" print("Starting " + Time.time);

// Start function WaitAndPrint as a coroutine. And wait until it is completed. // the same as yield WaitAndPrint(2.0); yield return StartCoroutine(WaitAndPrint(2.0F)); print("Done " + Time.time); }

// suspend execution for waitTime seconds IEnumerator WaitAndPrint(float waitTime) { yield return new WaitForSeconds(waitTime); print("WaitAndPrint " + Time.time); } }

public Coroutine StartCoroutine (string methodName, object value= null);

描述

启动一个名为 methodName 的协同程序。

在大多数情况下,您应该使用上面的 StartCoroutine 变体。 但是,使用字符串方法名称的 StartCoroutine 让您能够使用具有特定方法名称的 StopCoroutine。 缺点是字符串版本在启动协同程序时的运行时开销更高,并且您只能传递一个参数。

// In this example we show how to invoke a coroutine using a string name and stop it.

using UnityEngine; using System.Collections;

public class ExampleClass : MonoBehaviour { IEnumerator Start() { StartCoroutine("DoSomething", 2.0F); yield return new WaitForSeconds(1); StopCoroutine("DoSomething"); }

IEnumerator DoSomething(float someParameter) { while (true) { print("DoSomething Loop");

// Yield execution of this coroutine and return to the main loop until next frame yield return null; } } }

参数

coroutine所创建的协同程序的名称。

描述

启动一个名为 coroutine 的协同程序。

创建协程。可以使用任何协程名称。StartCoroutine 函数立即终止,然而,它创建的协程将 按预期运行。一个已创建的协程可以启动另一协程。 这两个协程能按多种方式共同运行。这包括 并行运行两个协程。或者,一个协程可以让 另一协程停止,而自己继续运行。以下脚本示例显示了 一个协程在启动另一协程时暂停。第二个协程 结束后,将重新启动第一个协程。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ExampleClass : MonoBehaviour { void Start() { StartCoroutine(coroutineA()); }

IEnumerator coroutineA() { // wait for 1 second Debug.Log("coroutineA created"); yield return new WaitForSeconds(1.0f); yield return StartCoroutine(coroutineB()); Debug.Log("coroutineA running again"); }

IEnumerator coroutineB() { Debug.Log("coroutineB created"); yield return new WaitForSeconds(2.5f); Debug.Log("coroutineB enables coroutineA to run"); } }