3テラバイト

プログラム関連備忘録サイト。主にゲーム。

Unity

Unity – コルーチンの使い方

投稿日:2020年6月11日 更新日:

こんにちは、今日はUnityでコルーチンの使い方についてまとめていきます。

コルーチンは関数の実行途中で中断し、指定時間経過後等の条件で再開できる関数のようなものです。
詳細については公式マニュアルの以下ページにて説明がされています。
https://docs.unity3d.com/ja/2018.4/Manual/Coroutines.html

確認環境

Unity 2018.4.15f1

コルーチンの書き方

以下のようにIEnumeratorを返す関数を定義し、その関数をStartCoroutineで実行します。

using System.Collections;
using UnityEngine;

public class TestScript : MonoBehaviour
{
    void Start()
    {
        StartCoroutine("CoroutineTest");
    }

    IEnumerator CoroutineTest()
    {
        Debug.Log("CoroutineTest Start");
        yield return new WaitForSeconds(5.0f);
        Debug.Log("CoroutineTest End");
    }
}

この例ではCoroutineTestの実行が開始され1つ目のログが出力された後、5秒後に2つ目のログが出力されます。
このように、通常は全ての処理が実行される関数内に、時間差で行いたい処理をまとめて記述することも可能です。

WaitForSeconds

https://docs.unity3d.com/ja/2018.4/ScriptReference/WaitForSeconds.html

前述の例でも使用したWaitForSecondsでは、指定秒数の間いコルーチンの処理を止めることができます。

IEnumerator CoroutineTest()
{
    Debug.Log("CoroutineTest Start");
    yield return new WaitForSeconds(5.0f);
    Debug.Log("CoroutineTest End");
}

WaitForSecondsRealtime

https://docs.unity3d.com/ja/2018.4/ScriptReference/WaitForSecondsRealtime.html

WaitForSecondsと同様指定した秒数処理を停止しますが、WaitForSecondsRealtimeではスケール化されていない時間を使用します。

using System.Collections;
using UnityEngine;

public class TestScript : MonoBehaviour
{
    void Start()
    {
        StartCoroutine("CoroutineTest");
    }

    IEnumerator CoroutineTest()
    {
        Debug.Log("CoroutineTest Start");
        yield return new WaitForSecondsRealtime(5.0f);
        Debug.Log("CoroutineTest End");
    }
}

WaitUntil

https://docs.unity3d.com/ja/2018.4/ScriptReference/WaitUntil.html

デリゲートを指定し、そのデリゲートがtrueと判定されるまで処理を停止します。
以下の例ではUpdate関数で変数countをインクリメントしcountの値が10になった時にデリゲートの条件がtrueとなり、処理が再開されます。

using System.Collections;
using UnityEngine;

public class TestScript : MonoBehaviour
{
    int count;

    void Start()
    {
        StartCoroutine("CoroutineTest");
    }

    IEnumerator CoroutineTest()
    {
        Debug.Log("CoroutineTest Start");
        yield return new WaitUntil(() => count >= 10);
        Debug.Log("CoroutineTest End");
    }

    void Update()
    {
        if(count < 10)
        {
            Debug.Log("count : " + count);
            count++;
        }
    }
}

WaitWhile

https://docs.unity3d.com/ja/2018.4/ScriptReference/WaitWhile.html

デリゲートを指定し、そのデリゲートがfalseと判定されるまで処理を停止します。
以下の例ではUpdate関数で変数countをインクリメントしcountの値が10になった時にデリゲートの条件がfalseとなり、処理が再開されます。

using System.Collections;
using UnityEngine;

public class TestScript : MonoBehaviour
{
    int count;
    void Start()
    {
        StartCoroutine("CoroutineTest");
    }

    IEnumerator CoroutineTest()
    {
        Debug.Log("CoroutineTest Start");
        yield return new WaitWhile(() => count < 10);
        Debug.Log("CoroutineTest End");
    }

    void Update()
    {
        if(count < 10)
        {
            Debug.Log("count : " + count);
            count++;
        }
    }
}

WaitForFixedUpdate

FixedUpdate関数が呼び出されるまで処理を停止します。

FixedUpdate
https://docs.unity3d.com/ja/current/ScriptReference/MonoBehaviour.FixedUpdate.html

https://docs.unity3d.com/ja/2018.4/ScriptReference/WaitForFixedUpdate.html

WaitForEndOfFrame

スクリーン上のレンダリング完了まで処理を停止します。

https://docs.unity3d.com/ja/2018.4/ScriptReference/WaitForEndOfFrame.html

-Unity


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

Unity – モニターがサポートするフルスクリーン解像度一覧を取得する

こんにちは、今日はUnityでモニターがサポートするフルスクリーン解像度一覧を取得する方法についてまとめていきます。 確認環境 Unity 2018.4.15f1 モニターがサポートするフルスクリーン …

no image

UnityのVideo Playerで動画の終了を判定する方法

こんにちは、今日はUnityのVideo Playerで動画の終了を判定する方法についてまとめていきます。 確認環境 Unity 2018.4.15f1 動画の終了を判定する VideoPlayer. …

no image

Unityでアプリケーションのフルスクリーン切り替えキーを無効にする方法

こんにちは、今日はUnityでアプリケーションのフルスクリーン切り替えキーを無効にする方法についてまとめていきます。 確認環境 Unity 2018.4.15f1 フルスクリーン切り替えキーの有効/無 …

no image

UnityでIMGUIのウィンドウを表示するGUI.Windowの使い方

こんにちは、今日はUnityでIMGUIのウィンドウを表示するGUI.Windowの使い方についてまとめていきます。 確認環境 Unity 2018.4.15f1 GUI.Windowの使い方 以下の …

no image

Unityで発生するWarning CS0649の対処方法

こんにちは、今日はUnityのC#スクリプトで発生するWarning CS0649の対処方法についてまとめていきます。 確認環境 Unity 2018.4.15f1 発生原因 以下のようなコードでスク …