【Unity】Invokeの使い方をちゃんと知る!コルーチンよりも気軽に使えるってよ

Invoke2.png
 Unityでゲームを開発していると必ずと言っていいほど「◯秒後に処理をする」必要がでてきます。それを実現するための関数が「Invoke」と「Coroutine」です。

 両者には色々な違いがありますがざっくりまとめると「Invokeは気軽に使えて、Coroutineは複雑な処理に向いている」という話です。Coroutineは処理の流れの中で数秒後の処理を記述できますが、Invokeはそれができず別の関数として切り出す必要があります。
ただし、それ故にInvokeはわかりやすいので、気軽に使えるのはInvokeなのではないかと個人的に思っています。

そんなわけで、Invokeの使い方を説明します。

Invoke()

Invoke("Function", 1);
Function には呼び出す関数名を文字列で渡します。"" が必要ですので忘れずに。
1 は実行までの秒数です。float型ですので 0.5f という書き方もできます。
実際に使ってみたコードはこちらです。
    void Start()
{
Invoke("Hoge", 1);
}

void Hoge()
{
Debug.Log("Fuga");
}
Hoge関数を1秒後に呼び出します。
1秒後にHoge関数内のDebug.Logが実行され、コンソールに「Fuga」と表示されると思います。

InvokeRepeating()

InvokeRepeating("Function", 1, 2);
X秒後に指定した関数を呼び出すまでは一緒ですが、その後Y秒間隔で繰り返し呼び出します。
ほとんどコルーチンみたいな使い方ができます。
Function に呼び出す関数名、
1 は実行までの秒数、
2 は繰り返し呼び出す秒数です。
    void Start()
    {
        InvokeRepeating("Hoge", 1,2);
    }

    void Hoge()
    {
        Debug.Log($"{Time.time}秒");
    }
Hoge関数を1秒後に呼び出します。
Hoge関数が実行され、コンソールに約1秒の数値が表示されます。
その後、2秒おきに「3秒」「5秒」「7秒」と数値が表示され続けます。(実際には小数点の数値になります)
以下で説明する CancelInvoke() を実行しない限り繰り返します。

CancelInvoke()

CancelInvoke();
実行されているInvokeを全て停止します。
条件分岐で実行したり、キー入力で実行したりする使い方になると思います。
    void Start()
{
InvokeRepeating("Hoge", 1,2);
}
void Update()
{
// スペースキーでキャンセルする
if (Input.GetKey(KeyCode.Space))
{
CancelInvoke();
}
}
void Hoge()
{
Debug.Log("Fuga");
}
Hoge関数を1秒後に呼び出します。
Hoge関数によってコンソールに「Fuga」と繰り返し表示されます。
スペースキーを押すと、Fugaの描画が止まります。

IsInvoking()

IsInvoking("Hoge");
指定した関数がInvokeで実行されているかどうか、bool型で返します。
「IsInvoking が true なら CancelInvoke する」のような条件分岐として使われます。


以上となります。
ケースバイケースでInvokeとCoroutineを使いこなせるようになりたいですね。