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のHierarchyの順序をスクリプトから変更する

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

no image

Unityの再生・停止・ステップ実行のショートカットキー

こんにちは、今日はUnityの再生・停止・ステップ実行のショートカットキーについてまとめていきます。 確認環境 Unity 2018.4.15f1 再生・停止・ステップ実行のショートカットキー ゲーム …

no image

Unityでアプリケーションの多重起動を制限する方法

こんにちは、今日はUnityでアプリケーションの多重起動を制限する方法についてまとめていきます。 確認環境 Unity 2018.4.15f1 アプリケーションの多重起動を制限する Edit > Pr …

no image

Unityのメモリ使用量をスクリプトで取得する

こんにちは、今日はUnityのメモリ使用量をスクリプトで取得する方法についてまとめていきます。 確認環境 Unity 2018.4.15f1 メモリ使用量取得 Unityがシステムから予約しているメモ …

no image

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

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