はじめに
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
- 複雑な処理やループ → コルーチン
- 複数の処理を順番に実行 → コルーチン一択!
どちらも便利な機能なので、場面に応じて正しく使い分けられるようになれば、演出や処理の幅が一気に広がります!


コメント