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

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


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

関連記事

no image

UnityでuGUIのButtonサイズを子のTextのサイズに自動で合わせる

こんにちは、今日はUnityのuGUIでButtonのサイズを、子オブジェクトのTextのサイズに合わせて変更する方法についてまとめていきます。 確認環境 Version 2018.4.15f1 実装 …

no image

Unityでカーソルの表示、ロック、画像の切り替えをする

こんにちは、今日はUnityでカーソルの表示、ロック、画像の切り替えをする方法についてまとめていきます。 確認環境 Unity 2018.4.15f1 カーソルの表示、非表示 表示 Cursor.vi …

no image

Unity – システム情報とハードウェア情報を取得する

こんにちは、今日はUnityで実行環境のOSやCPU、メモリ等のシステム情報、ハードウェア情報を取得する方法についてまとめていきます。 確認環境 Unity 2018.4.15f1 システム情報とハー …

no image

Unity – pingを実行する

こんにちは、今日はUnityでpingを実行する方法についてまとめていきます。 確認環境 Unity 2018.4.15f1 pingの実行方法 UnityEngine.Pingクラスを使用します。 …

no image

Unity2020でMapboxを使用する

この記事ではエラー回避のため、SDKからAR関連パッケージを除外してインポートを行います。セットアップ完了まで動作確認済ですが、AR以外にも動作に影響している可能性があります。 確認環境 Unity …