【Unity】はじめてのコルーチン!これさえ読めば基礎はカンペキ

皆さんはコルーチンを使ったことがありますか?

名前は聞いたことがあるけど使ったことはない方はいるかもしれません。

この記事では、

・そもそもコルーチンとは
・コルーチンの基本的な使い方

といった基本的なことから、

・コルーチンの途中で終了
・複数のコルーチンを扱う

といった少し応用的なことまでわかりやすく解説します。

コルーチンとは

コルーチンとは簡単に言うと、中断できる処理のまとまりのことです。

数秒後に何か処理を行いたいときや非同期のような処理を作成するときなどに使います。

これだけではわかりにくいと思うので、実際に使っていきましょう!

今回はわかりやすく、非常にシンプルな使い方を見ていきます。

基本的な使い方を学ぼう

実際にコルーチンを使って見る前に、簡単に使い方について説明しておきましょう。

コルーチンを使うにはまず、宣言をする必要があります。

宣言はこのように行います。

 IEnumerator 関数名()
    {
        //ここに処理を書く

        //1フレーム停止
        yield return null;

        //ここに再開後の処理を書く
    }

注目すべきはyield return nullでしょう。

この部分で処理を1フレーム停止させ、次のフレームから再開させます。

1フレームではなく、好きな秒数停止させることもできます。

その場合は、

yield return new WaitForSeconds(止めたい秒数);

といったように使います。

yield returnのあとをnullではなく、『new WaitForSeconds(止めたい秒数)』に変えるだけですね。

コルーチンを実行するにはStartCoroutineメソッドを使います。

 StartCoroutine("関数名");

それでは実際に使ってみましょう。

最初にオブジェクトを赤くし、3秒経過したら青色に変化させようと思います。

適当なオブジェクトとスクリプトを作成して、スクリプトをオブジェクトにアタッチしてください。

オブジェクトは見えるような場所においてください。

それではコードを書いていきましょう。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{

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

    IEnumerator ChangeColor()
    {
        //赤色にする
        gameObject.GetComponent<Renderer>().material.color = Color.red;

        //3秒停止
        yield return new WaitForSeconds(3);

        //青色にする
        gameObject.GetComponent<Renderer>().material.color = Color.blue;
    }

}

実行結果は、

色を変えられていますね!

このように、コルーチンを使えば簡単に数秒後の処理を行うことができます。

さらに使いこなすために

ここではさらに使いこなすために、よくある高度な使い方を覚えておきましょう。

途中で終了

コルーチンは途中で終了させることができます。

やることは非常に簡単で、yield breakを付け加えれば良いだけです。

それでは先ほどのコードの3秒停止する部分を、途中で終了させる処理に変更したいと思います。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{

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

    IEnumerator ChangeColor()
    {
        //赤色にする
        gameObject.GetComponent<Renderer>().material.color = Color.red;

        yield break;

        //青色にする
        gameObject.GetComponent<Renderer>().material.color = Color.blue;
    }

}

このコードだと、yield breakの部分でコルーチンが終了して青色に変わらないはずです。

実行してみて本当に変わらないのか確かめてみましょう。

実行結果は、

青色に変わっていませんね!

このようにyield breakを使えば、コルーチンを途中で終了させられます。

複数のコルーチンを扱う

コルーチンの中でコルーチンを用いることで、複数のコルーチンを扱うことができます。

今回扱うコードは、

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{
    private void Start()
    {
        StartCoroutine("ChangeColor1");
    }

    IEnumerator ChangeColor1()
    {

        //赤色にする
        gameObject.GetComponent<Renderer>().material.color = Color.red;

        //1秒停止
        yield return new WaitForSeconds(1);

        //もう一つのコルーチンを実行する
        StartCoroutine("ChangeColor2");

    }

    IEnumerator ChangeColor2()
    {

        //青色にする
        gameObject.GetComponent<Renderer>().material.color = Color.blue;

        //1秒停止
        yield return new WaitForSeconds(1);

        //黄色にする
        gameObject.GetComponent<Renderer>().material.color = Color.yellow;

    }

}

このコードでは、コルーチンの中でコルーチンを用いることでオブジェクトの色が赤青黄と1秒ごとに変わります。

実行結果は、

このようにコルーチンの中でコルーチンを使うことによって複数のコルーチンを扱うことができます。

まとめ

いかがでしたか?

コルーチンを使えば数秒後の処理が簡単に実装できます。

使い方を覚えて、コルーチンを使いこなしましょう!

Writer

sato

学生時代を含めると、かれこれ10年以上プログラマーとして過ごしています。
様々な言語や環境、プロジェクトに関わってきましたので、より実践的な記事をみなさんにお届きるよう情報発信していきます!

あなたの目的に合わせた
SAMURAI ENGINEERの運営サービス

SAMURAI ENGINEER Pro

未経験でも挫折しないプログラミングスクール

詳細はこちら

SAMURAI ENGINEER Plus

日本最大級のサブスク型オンラインITスクール

詳細はこちら

SAMURAI ENGINEER Freelance

「一人で稼げる」スキルを身につける

詳細はこちら