はじめに
ゲームを作っていると、数秒遅らせて処理したいという場面にしばしば出くわすと思います。自分はよくコルーチンを使うのですが、この前、Invokeで実装する方法を知ったので紹介します。
Invoke
Invoke
と聞くと、Action
とかUnityEvent
のデリゲートのほうを思い浮かべる方も多いと思いますが、それとは別にMonoBehaviour.Invoke
があります。
Invoke("関数名", 秒数)で、指定した関数を指定した秒数後に実行できます。
注意点が、関数名の指定部分はstringで関数名を指定する点です。
タイポしたり、後に関数名を変更したりして、関数名の文字列を間違っていても特にコンパイルでは引っかからないのでnameof
を使って指定すると保守性は上がります。
MonoBehaviour-Invoke - Unity スクリプトリファレンス
サンプルコード
void Start() { Debug.LogError("スタート"); Invoke("Test", 3); } void Test() { Debug.LogError("Testです"); }
nameofで書いた場合は↓のような感じ
void Test2() { Invoke(nameof(Test), 3); }
実行結果
タイムスタンプを見ると、3秒後に実行されていることがわかります。
まとめ
Invokeではあまり複雑なことはできませんが、数秒遅らせる処理という要求だけであればこれで大丈夫そうですね。