public Coroutine StartCoroutine (IEnumerator routine);

描述

启动一个协同程序。

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

使用 JavaScript 时,没有必要使用 StartCoroutine,编译器会为您执行该操作。 编写 C# 代码时,必须手动调用 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"); } }
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961