初心者でもわかる!Invokeとコルーチンって何が違うの?Unityでの使い方と実例まとめ

Unity

はじめに

Unityでタイミングをずらして処理を実行したいとき、よく使われるのがInvokeとCoroutine(コルーチン)です。

「どっちを使えばいいの?」「何が違うの?」と迷ったことはありませんか?

この記事では、Unity初心者でも分かるように、Invokeとコルーチンの違い・使い方・使い分けの場面について解説します。

また、実際のゲームでの活用例や、違いがわかりやすいスクリプトも紹介します!


1. Invokeとコルーチンの違い【ざっくりまとめ】

特徴InvokeCoroutine
用途一定時間後に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
  • 複雑な処理やループ → コルーチン
  • 複数の処理を順番に実行 → コルーチン一択!

どちらも便利な機能なので、場面に応じて正しく使い分けられるようになれば、演出や処理の幅が一気に広がります!

コメント

タイトルとURLをコピーしました