javascriptでcoroutineを使う際は、
処理1 yield WaitForSeconds(2); 処理2
と、yiledをはさむだけでよい。
C#の場合は、StartCoroutine/IENumearatorの組になるようだ。
public void endRecording(){ if(isFile){ titleScreen.endRecording(); // StartCoroutine("resstartGame"); } } IEnumerator resstartGame(){ print ("before waiting"); yield return new WaitForSeconds(3); //Wait for 3 seconds print ("after waiting"); Application.LoadLevel(0); //If not writing, restart scene. }
次の事例は、呼び出す関数に引数がある場合。
using UnityEngine; using System.Collections; public class DoCoroutine : MonoBehaviour { // Use this for initialization void Start () { print("Starting " + Time.time); StartCoroutine("WaitAndPrint", 2.0F); print("Before WaitAndPrint Finishes " + Time.time); } // WaitAndPrint IEnumerator WaitAndPrint(float waitTime) { yield return new WaitForSeconds(waitTime); print("WaitAndPrint " + Time.time); } }
この実行結果は次のようになる。
Starting 0 Before WaitAndPrint Finishes 0 WaitAndPrint 2.007803
つまり、呼び出す側ではStartCoroutineに続く行は即実行される。
StartCoroutineの引数は、関数オブジェクトでもよい。上例は次のように書いても良い。
void Start () { print("Starting " + Time.time); StartCoroutine(WaitAndPrint(2.0F)); print("Before WaitAndPrint Finishes " + Time.time); }
※こういう参考事例も ねぎもちもち: Unityで音のフェードアウト
開始したCoroutineを停止する場合は、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; } } }
StopCoroutineは、関数名の文字列でStartCoroutineを呼び出した場合のみ使える。なので、StartCoroutineは関数を文字列で呼び出すのを標準にしたほうが良さそう。