本文へスキップ
BecomeCoder

C#実践コース · 第8章 Unity開発 · レッスン48

コルーチンと時間制御

ローカル実施

導入

「3秒待ってから爆発」「1秒ごとにダメージ」——時間をまたぐ処理を、Updateにカウンタを書かずに素直に表現できるのがコルーチンです。C#のyield(Iterator)とIEnumeratorが土台です。

図解

flowchart LR
    S["StartCoroutine"] --> Y1["処理A"]
    Y1 --> W["yield return<br/>WaitForSeconds(1)"]
    W --> Y2["1秒後に処理B"]
    Y2 --> W2["yield return ..."]
    style W fill:#fff3e0

サンプル(Unity C# ― 読み物)

using System.Collections;
using UnityEngine;

public class Bomb : MonoBehaviour
{
    void Start()
    {
        // コルーチンを開始する
        StartCoroutine(Countdown());
    }

    // 戻り値が IEnumerator のメソッドがコルーチン( yield が土台)
    IEnumerator Countdown()
    {
        for (int i = 3; i >= 1; i--)
        {
            Debug.Log($"{i}...");
            yield return new WaitForSeconds(1);   // ここで1秒待つ(処理は中断→再開)
        }
        Debug.Log("爆発!");
    }
}
  • コルーチンは戻り値がIEnumeratorのメソッド(yield returnがそのまま活きる)
  • StartCoroutine(...)で開始する
  • yield return new WaitForSeconds(秒)で「そこで待って再開」を表現できる
  • Updateに自前のタイマー変数を書くより、処理の流れが素直に読める

Unityで試す

  • 空のGameObjectにBombを貼って再生し、Consoleに「3…」「2…」「1…」「爆発!」が1秒間隔で出ることを確認
  • WaitForSecondsの秒数を変えて間隔が変わることを確かめる

まとめ

  • コルーチンは時間をまたぐ処理を素直に書ける(IEnumeratoryield
  • StartCoroutineで開始、yield return new WaitForSecondsで待機
  • C#のyieldの知識がそのまま活きる

次回: オブジェクトを動的に生み出す——プレハブとInstantiateです。