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

50種類以上のIT教材を無料で使える!
0円から学習できるオンラインITスクール「侍テラコヤ」
→さっそく登録する

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

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

この記事では、

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

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

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

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

コルーチンとは

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

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

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

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


【何から学べばいいかわからない…そんな悩みを解決します!】

完全無料ですぐわかる「プログラミング学習プラン診断」

・適性にあわせて学習プランを診断
・完全無料で気軽に診断できる
・学習の悩みもまるっと解決

さっそく診断してみる

基本的な使い方を学ぼう

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

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

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

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

実行結果は、

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


【なかなかエラーが解決できない…そんな悩みを解決します!】

登録無料で始められるプログラミングスクール「侍テラコヤ」

・回答率100%のQ&A掲示板でエラーを解決!
現役エンジニアとのオンライン相談で悩みを解決!
・50種類以上の教材で複数言語を習得!

侍テラコヤについて詳しく見る

まとめ

いかがでしたか?

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

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

プログラミング学習中、
誰かへ相談したいことはありませんか?

SAMURAI TERAKOYA

プログラミングはエラーの連続。作業を進めるなかで誰かに教えてほしい場面は多いですよね。

そんな悩みを解決できるのが、侍テラコヤです。登録無料で始められて、現役エンジニアとオンラインで相談できるほか、回答率100%のQA掲示版でプログラミングに関する悩みを解決します!

気になる方はぜひ詳細をご覧ください。

→侍テラコヤの詳細をみる

Writer

sato

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

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

SAMURAI ENGINEER Pro

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

詳細はこちら

SAMURAI TERAKOYA

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

詳細はこちら

SAMURAI ENGINEER Freelance

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

詳細はこちら
Close