強火で進め

このブログではプログラム関連の記事を中心に書いてます。

Coroutine(コルーチン)/yield(イールド)の話 その2

yield は単体でも使用可能です。単体で使用した場合には1フレーム遅れてから実行されます。

そのため、以下の test() の様に無限ループの中で使用した場合には1フレーム毎に呼ばれる事になります。

※「Start」ボタンを押すとCoroutineの開始。「Stop」を押すとCoroutineが停止します。

function OnGUI () {
	if (GUI.Button(Rect(5, 5, 100, 100), "Start")) {
		StartCoroutine("test");
	}
	if (GUI.Button(Rect(5, 110, 100, 100), "Stop")) {
		StopCoroutine("test");
	}
}

function Update () {
	print("Update " + Time.time);
}

function test() {
	while(1) {
		yield;
		print("-----test " + Time.time);
	}
}

Coroutineはこの様な動作をする為、マルチスレッドプログラムと似た処理を作る事が可能です。

Unity Script Reference – Overview: Coroutines & Yield
http://unity3d.com/support/documentation/ScriptReference/index.Coroutines_26_Yield.html