Unityにおけるコルーチン入門

C# のコルーチンを使いこなして処理をコントロールしよう

TL;DR

  • コルーチンは Unity 独自の機能で、処理を複数フレームにまたいで実行できる。
  • IEnumerator と yield return を使うことで「待ち時間」や「条件待ち」を自然に記述できる。
  • 時間差イベントやアニメーション制御に便利。
  • ただし「スレッドではない」ため、重い処理を分散することはできない。

1. コルーチンとは?

通常のメソッドは呼び出すと最後まで一気に実行されます。

しかしゲーム開発では、例えば:

  • 3秒後に次の処理をしたい
  • フレームごとに少しずつ進めたい
  • ある条件が満たされるまで待ちたい

といったニーズがよく出てきます。

そこで役立つのが コルーチン(Coroutine) です。


2. イラストで理解する「処理の流れ」

通常のメソッド:

Start()
 ├─処理A
 ├─処理B
 └─処理C   ← 一気に実行

コルーチンを使った場合:

StartCoroutine()
 ├─処理A
 ├─yield return 3秒待つ
 │
 ├─処理B(3秒後に再開)
 ├─yield return 次のフレームまで待つ
 │
 └─処理C(次フレームで再開)

➡ 「一度止まって、後から再開できる」のがポイントです。


3. 基本コード例

using System.Collections;
using UnityEngine;

public class CoroutineSample : MonoBehaviour
{
    void Start()
    {
        StartCoroutine(SampleCoroutine());
    }

    IEnumerator SampleCoroutine()
    {
        Debug.Log("処理開始");

        yield return new WaitForSeconds(3);
        Debug.Log("3秒後の処理");

        yield return null;
        Debug.Log("次のフレームで処理");
    }
}

4. よく使う yield return

記述意味
yield return null;1フレーム待つ
yield return new WaitForSeconds(3);3秒待つ
yield return new WaitUntil(() => 条件式);条件が満たされるまで待つ
yield return new WaitWhile(() => 条件式);条件が成立している間は待つ

5. サンプルシーンで学ぶ

シーン構成例

  • Main Camera
  • Canvas
    • UI → Text – TextMeshPro (UI: ログ表示用)
  • GameController (Script付き)

スクリプト例

using System.Collections;
using UnityEngine;
using TMPro;  // ← TextMeshProを使う場合に必要

public class GameController : MonoBehaviour
{
    public TextMeshProUGUI logText;  // ← Text → TextMeshProUGUI に変更

    void Start()
    {
        StartCoroutine(OnboardingSequence());
    }

    IEnumerator OnboardingSequence()
    {
        logText.text = "ゲーム開始!";

        yield return new WaitForSeconds(2);
        logText.text = "敵が現れた!";

        yield return new WaitForSeconds(3);
        logText.text = "プレイヤーのターン!";
    }
}

➡ 実行すると UI テキストが時間差で切り替わり、ゲームの進行演出を簡単に作れます。


6. 停止・再開

コルーチンを途中で止めたいときは以下のようにします。

Coroutine routine;

void Start()
{
    routine = StartCoroutine(MyCoroutine());
}

void StopIt()
{
    StopCoroutine(routine); // 個別停止
    // StopAllCoroutines(); // 全停止
}

7. 注意点

  • スレッドではない:並列処理ではなく「中断と再開」。
  • MonoBehaviour依存:StartCoroutine は MonoBehaviour から呼び出す必要あり。
  • 複雑なロジックは避ける:長すぎるコルーチンは可読性を損なう。

まとめ

コルーチンは 「待ち」を直感的に書ける Unity の仕組みです。

時間制御や演出に役立ちますが、「スレッドではない」点に注意しながら、ゲーム進行や UI アニメーションに活用していきましょう。


訪問数 23 回, 今日の訪問数 23回

Unity,コルーチン

Posted by hidepon