この記事でのバージョン
Unity 5.1.0f3 Personal
Invoke
Unityで一定時間後に処理を行うといった遅延処理を行う場合、
Invokeというメソッドがあります。
//1秒後にDelayMethodというメソッドを実行 Invoke("DelayMethod", 1.0f);
簡単に使えますが、メソッドの指定が文字列だったり、
引数が渡せなかったりと、不便な点も多くなかなか使い辛いモノです。
コルーチン
また、コルーチンを使う方法もあります。
private void Start() { StartCoroutine(DelayMethod(1.0f, "test")); } IEnumerator DelayMethod(float delay, string text) { //delay秒待つ yield return new WaitForSeconds(delay); /*処理*/ }
この方法なら引数も渡せますし、メソッド名も文字列指定ではありません。
さらこの/*処理*/の部分を別メソッドにし、デリゲートで渡してやれば、使い勝手が良くなります。
private void Start() { //3.5秒後に実行する StartCoroutine(DelayMethod(3.5f, () => { Debug.Log("Delay call"); })); } /// <summary> /// 渡された処理を指定時間後に実行する /// </summary> /// <param name="waitTime">遅延時間[ミリ秒]</param> /// <param name="action">実行したい処理</param> /// <returns></returns> private IEnumerator DelayMethod(float waitTime, Action action) { yield return new WaitForSeconds(waitTime); action(); }
上記の記事でもあるようにこれを拡張メソッドとして作成しておけば、
いつでも使えて便利ですね。
MonoBehaviorExtentsion
という事でその拡張メソッドが以下の通りです。
使い方はこんな感じ、
StartCoroutine(this.DelayMethod(1.0f, Method, "test")); private void Method(string text){ Debug.Log(text); }
StartCoroutine(this.DelayMethod(遅延時間, メソッド, 引数));
という形式で、引数は0〜2個まで設定出来るようにしています。
これで簡単に引数を渡して遅延処理出来ますね……!