LoginSignup
2
3

More than 1 year has passed since last update.

Unity Coroutine(コルーチン)の途中で中断する方法

Posted at

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() {
    // ここにコルーチン処理を記述  
}
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3