0.0 はじめに
非同期処理が可能なコルーチンの途中で一定時間中断する方法をまとめました。
ちなみにコルーチンは、下記のようにIEnumeratorを返す関数で実装、StartCoroutineメソッドで呼び出します。
Test.cs
void Start () {
// コルーチンを実行("TestCo"でも可)
StartCoroutine (TestCo());
}
// コルーチン
IEnumerator TestCo() {
// ここにコルーチン処理を記述
}
1.0 1フレーム中断 yield return null
1フレーム中断した後、残りの処理再開する。
Test.cs
IEnumerator TestCo() {
yield return null // 1フレーム中断
}
2.0 終了 yield break
Test.cs
IEnumerator TestCo() {
yield break // ここでコルーチン終了
}
3.0 指定時間中断 WaitForSeconds(float sec)
中断時間はFloat 秒で指定できます。
Test.cs
IEnumerator TestCo() {
yield return new WaitForSeconds(2.0f)// ここで2秒中断
}
4.0 条件が合うまで中断 WaitUntil()
同じ種類には逆条件(条件が外れる間は中断)ようにWaitWhile()があります。()内の引数には引数にはboolを入れるのではなく、デリゲートを入れます。
Test.cs
bool flag = false;
IEnumerator TestCo() {
// スペースキー押すと中断終了
yield return new WaitUntil(() => Input.GetKeyDown(KeyCode.Space));
// flagがtrueになると中断終了
yield return new WaitUntil(() => flag);
}
5.0 その他
コルーチン中に別のコルーチンを入れ子にして処理することもできます。
下記の例では1のコルーチンは2のコルーチンが終了するまで中断しています。
注) StartCoroutine()の前にyield returnを書かないとTestCo1()が止まらず並行処理されます。
Test.cs
IEnumerator TestCo1() {
// TestCo2()コルーチンをスタート
yield return StartCoroutine(TestCo2());
}
IEnumerator TestCo2() {
// ここにコルーチン処理を記述
}