【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秒ごとに変わります。

実行結果は、

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

まとめ

いかがでしたか?

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

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

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次