ルルのゲーム開発備忘録

主にUnityやC#に関する情報を気まぐれに投稿していきま~す

【Unity】関数を数秒後に遅らせて実行する処理を簡単に書く方法 [Invoke]

はじめに

ゲームを作っていると、数秒遅らせて処理したいという場面にしばしば出くわすと思います。自分はよくコルーチンを使うのですが、この前、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
Invoke

まとめ

Invokeではあまり複雑なことはできませんが、数秒遅らせる処理という要求だけであればこれで大丈夫そうですね。