導入
「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の秒数を変えて間隔が変わることを確かめる
まとめ
- コルーチンは時間をまたぐ処理を素直に書ける(
IEnumerator+yield) StartCoroutineで開始、yield return new WaitForSecondsで待機- C#の
yieldの知識がそのまま活きる
次回: オブジェクトを動的に生み出す——プレハブとInstantiateです。