はじめに
Unityでタイミングをずらして処理を実行したいとき、よく使われるのがInvokeとCoroutine(コルーチン)です。
「どっちを使えばいいの?」「何が違うの?」と迷ったことはありませんか?
この記事では、Unity初心者でも分かるように、Invokeとコルーチンの違い・使い方・使い分けの場面について解説します。
また、実際のゲームでの活用例や、違いがわかりやすいスクリプトも紹介します!
1. Invokeとコルーチンの違い【ざっくりまとめ】
特徴 | Invoke | Coroutine |
---|---|---|
用途 | 一定時間後に1回だけ実行 | 時間をかけて複数回にわたる処理 |
返り値 | なし | IEnumerator型で制御可能 |
停止 | CancelInvoke() | StopCoroutine() |
柔軟性 | △(単発) | ◎(ループ・複雑な制御が可能) |
2. 使い方
■ Invokeの使い方
void Start() { Invoke("Hello", 2f); // 2秒後にHello()を1回呼ぶ } void Hello() { Debug.Log("こんにちは!"); }
■ コルーチンの使い方
void Start() { StartCoroutine(HelloCoroutine()); } IEnumerator HelloCoroutine() { yield return new WaitForSeconds(2f); Debug.Log("こんにちは!"); }
3. 使う場面の違い
シチュエーション | 使うべきは? | 理由 |
---|---|---|
一度だけ遅延して実行したい | Invoke | 簡単・一行で済む |
繰り返し処理・途中停止が必要 | コルーチン | 柔軟に制御できる |
時間を空けて順番に処理したい | コルーチン | 複数のyieldが使える |
ゲームの演出やアニメーション | コルーチン | 途中経過が大事 |
4. 実際のゲームでの使用例
例1:敵の攻撃を3秒後に発動(Invoke)
void Start() { Invoke("EnemyAttack", 3f); } void EnemyAttack() { Debug.Log("敵が攻撃してきた!"); }
例2:HPバーが徐々に減る演出(コルーチン)
public IEnumerator DecreaseHPBar() { float current = 1f; while (current > 0f) { current -= 0.01f; hpBar.fillAmount = current; yield return new WaitForSeconds(0.01f); } }
5. 違いがわかる簡単な比較スクリプト
using UnityEngine; public class TimerExample : MonoBehaviour { void Start() { // Invoke:一度だけ Invoke("ShowInvoke", 2f); // コルーチン:繰り返し使える StartCoroutine(ShowCoroutine()); } void ShowInvoke() { Debug.Log("Invoke:2秒後に1回だけ実行"); } System.Collections.IEnumerator ShowCoroutine() { for (int i = 0; i < 3; i++) { yield return new WaitForSeconds(1f); Debug.Log("Coroutine:1秒ごとに" + (i + 1) + "回目の実行"); } } }
実際にゲームを開始し、比較スクリプトを実行すると以下のようなログが確認できます。

まとめ|使い分けのポイント
- 単純な遅延実行 → Invoke
- 複雑な処理やループ → コルーチン
- 複数の処理を順番に実行 → コルーチン一択!
どちらも便利な機能なので、場面に応じて正しく使い分けられるようになれば、演出や処理の幅が一気に広がります!
コメント