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 アニメーションに活用していきましょう。
訪問数 3 回, 今日の訪問数 3回
ディスカッション
コメント一覧
まだ、コメントがありません