本日はUnityの小ネタ枠です。
UnityでMonoBehaviourのInvokeを使って指定秒後に処理を呼び出す方法です。
MonoBehaviour.Invoke
MonoBehaviourのInvokeは指定のメソッドを指定秒後に呼び出します。
docs.unity3d.com
void Start() { // 2秒後にDebugLogメソッドを呼び出す Invoke("DebugLog", 2.0f); } void DebugLog() { Debug.Log("Hello, World!"); }
Invokeで呼び出すメソッドは引数を指定することはできません。
MonoBehaviour.StartCoroutineと異なり、戻りがIEnumeratorではない通常のメソッドでも呼び出し対象に指定できます。
サンプルスクリプト
以下の様々なInvokeの呼び出しを試すサンプルスクリプトを作成しました。
・InvokeTest.cs
using UnityEngine; public class InvokeTest : MonoBehaviour { void Start() { // 秒数指定が0の場合は直後(Update前)に実行される Invoke("VoidDebugLog", 0.0f); // 2秒後にメソッドを実行する Invoke("VoidDebugLog", 2.0f); // 負数の場合は指定なしまたは0秒と同様に即座に実行される Invoke("VoidDebugLog", -1.0f); // 戻り値があるメソッドもInvokeで呼び出せる Invoke("BoolDebugLog", 3.0f); // 引数があるメソッドはInvokeで呼び出せない Invoke("ArgumentDebugLog", 4.0f); } void VoidDebugLog() { Debug.Log("Called VoidDebugLog()"); } bool BoolDebugLog() { Debug.Log("Called BoolDebugLog()"); return true; } void ArgumentDebugLog(string message) { Debug.Log("Called ArgumentDebugLog() : " + message); } }
以下の通り指定時間後に処理が実行されました。

引数があるメソッドは以下のエラーが発生して実行できません。
Trying to Invoke method: InvokeTest.ArgumentDebugLog couldn't be called.