MonoBehaviour.StartCoroutine 开始协同程序

function StartCoroutine (routine : IEnumerator) : Coroutine

Description描述

Starts a coroutine.

开始协同程序。

The execution of a coroutine can be paused at any point using the yield statement. The yield return value specifies when the coroutine is resumed. Coroutines are excellent when modelling behaviour over several frames. Coroutines have virtually no performance overhead. StartCoroutine function always returns immediately, however you can yield the result. This will wait until the coroutine has finished execution.

一个协同程序在执行过程中,可以在任意位置使用yield语句。yield的返回值控制何时恢复协同程序向下执行。协同程序在对象自有帧执行过程中堪称优秀。协同程序在性能上没有更多的开销。StartCoroutine函数是立刻返回的,但是yield可以延迟结果。直到协同程序执行完毕。

When using JavaScript it is not necessary to use StartCoroutine, the compiler will do this for you. When writing C# code you must call StartCoroutine.

用javascript不需要添加StartCoroutine,编译器将会替你完成.但是在C#下,你必须调用StartCoroutine。

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
	void Start() {
	print("Starting " + Time.time);
		StartCoroutine(WaitAndPrint(2.0F));
		print("Before WaitAndPrint Finishes " + Time.time);
	}
	IEnumerator WaitAndPrint(float waitTime) {
		yield return new WaitForSeconds(waitTime);
		print("WaitAndPrint " + Time.time);
	}
}
// In this example we show how to invoke a coroutine and continue executing
// the function in parallel.
// 此例演示如何调用协同程序和它的执行
function Start() {
	// - After 0 seconds, prints "Starting 0.0"
	// - After 0 seconds, prints "Before WaitAndPrint Finishes 0.0"
	// - After 2 seconds, prints "WaitAndPrint 2.0"
	// 先打印"Starting 0.0"和"Before WaitAndPrint Finishes 0.0"两句,2秒后打印"WaitAndPrint 2.0"
	print ("Starting " + Time.time );
	// Start function WaitAndPrint as a coroutine. And continue execution while it is running
	// this is the same as WaintAndPrint(2.0) as the compiler does it for you automatically
	// 协同程序WaitAndPrint在Start函数内执行,可以视同于它与Start函数同步执行.
	StartCoroutine(WaitAndPrint(2.0)); 
	print ("Before WaitAndPrint Finishes " + Time.time );
}

function WaitAndPrint (waitTime : float) {
	// suspend execution for waitTime seconds
	// 暂停执行waitTime秒
	yield WaitForSeconds (waitTime);
	print ("WaitAndPrint "+ Time.time );
}

另一个例子:

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
	IEnumerator Start() {
		print("Starting " + Time.time);
		yield return StartCoroutine(WaitAndPrint(2.0F));
		print("Done " + Time.time);
	}
	IEnumerator WaitAndPrint(float waitTime) {
		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
// 在这个例子中我们演示如何调用协同程序并直到它执行完成.
function Start() {
	// - After 0 seconds, prints "Starting 0.0"
	// - After 2 seconds, prints "WaitAndPrint 2.0"
	// - After 2 seconds, prints "Done 2.0"
	// 0秒时打印"Starting 0.0",2秒后打印"WaitAndPrint 2.0"和"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);
	// 运行WaitAndPrint直到完成
	yield StartCoroutine(WaitAndPrint(2.0));
	print ("Done " + Time.time );
}

function WaitAndPrint (waitTime : float) {
	// suspend execution for waitTime seconds
	// 等待waitTime秒
	yield WaitForSeconds (waitTime);
	print ("WaitAndPrint "+ Time.time );
}

• function StartCoroutine (methodName : string, value : object = null) : Coroutine

Description描述

Starts a coroutine named methodName.

开始一个叫methodName的协同程序.

In most cases you want to use the StartCoroutine variation above. However StartCoroutine using a string method name allows you to use StopCoroutine with a specific method name. The downside is that the string version has a higher runtime overhead to start the coroutine and you can pass only one parameter

很多情况下,我们会用到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;
		}
	}
}
// In this example we show how to invoke a coroutine using a string name and stop it
// 这个例子演示如何调用一个使用字符串名称的协同程序并停掉它
function Start () {
	StartCoroutine("DoSomething", 2.0);
	yield WaitForSeconds (1);
	StopCoroutine("DoSomething");
}

function DoSomething (someParameter : float) {
	while (true) {
		print("DoSomething Loop");
		// Yield execution of this coroutine and return to the main loop until next frame
		// 停止协同程序的执行并返回到主循环直到下一帧.
		yield;
	}
}
Page last updated: 2011-1-2