【Unity/C#】コルーチンのサンプル


概要

本記事では【Unity/C#】コルーチンについてでコルーチンについての基本的なことを学んだのでコルーチンを用いた実用例をいくつかご紹介したいと思います。

目次

x秒後に処理

サンプルコード

    IEnumerator Delay(float _delayTime)
    {
        //ここで指定した秒数止める
        yield return new WaitForSeconds(_delayTime);

        //ここから処理
    }

x秒ごとにfor文を動かす

    IEnumerator Delay(float _delayTime)
    {
        for (int i = 0; i < 10; i++)
        {
            //この間に処理


            //この間に処理

            //ここで指定した秒数止める
            yield return new WaitForSeconds(_delayTime);
        }
    }

1フレーム後に処理

IEnumerator Delay()
{
    //1フレーム遅らせる
    yield return null;
    //このコルーチンが呼び出されて1フレーム後にここまで到達

    //1フレーム遅らせる
    yield return null;
    //このコルーチンが呼び出されて2フレーム後にここまで到達
}

1フレームごとにfor文を動かす

サンプルコード

    IEnumerator Delay()
    {
        for (int i = 0; i < 10; i++)
        {
            //この間に処理


            //この間に処理

            //ここで指定した秒数止める
            yield return null;
        }
    }

Fade

FadeIn

サンプルコード

    IEnumerator FadeIn(SpriteRenderer _sr,float _decrease)
    {
        //この処理が動いていたら2重に呼び出されてもここで止める
        if (startUp==true)
        {
            yield break;
        }
        //↑で処理を止めるフラグをtureに
        startUp = true;

        //カラー情報を取得
        Color color = _sr.color;

        //α値を0になるまで減らす
        while (_sr.color.a>=0)
        {
            //α値を減らす
            color.a -= _decrease*Time.deltaTime;
            //カラーを適応
            _sr.color = color;
            //処理を1フレーム遅らせ続ける
            yield return null;
        }

        //処理を終了
        startUp = false;
        yield break;
    }

FadeOut

サンプルコード

    IEnumerator FadeOut(SpriteRenderer _sr,float _add)
    {
        //この処理が動いていたら2重に呼び出されてもここで止める
        if (startUp==true)
        {
            yield break;
        }
        //↑で処理を止めるフラグをtureに
        startUp = true;

        //カラー情報を取得
        Color color = _sr.color;

        //α値を0になるまで減らす
        while (_sr.color.a<=1)
        {
            //α値を増やす
            color.a += _add*Time.deltaTime;
            //カラーを適応
            _sr.color = color;
            //処理を1フレーム遅らせ続ける
            yield return null;
        }

        //処理を終了
        startUp = false;
        yield break;
    }