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でWindows、Mac、Android、iOS等の各プラットフォームごとや、エディタ上で実行されている場合にスクリプトの処理を切り分ける方法についてまとめていきます。 確 …

no image

Unityで簡単なセーブ機能を実装できるPlayerPrefsの使い方

プラットフォームごとの保存先が公式ドキュメントに記載されています。Windowsはレジストリに保存を行うため、レジストリにデータを保存したくない場合は別の実装にする必要があります。 確認環境 Unit …

no image

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

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

no image

UnityのHierarchyの順序をスクリプトから変更する

こんにちは、今日はUnityのHierarchyの順序をスクリプトから変更する方法についてまとめていきます。 確認環境 Unity 2018.4.15f1 Hierarchyの順序をスクリプトから変更 …

no image

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

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