LemonteaのUnity部屋

UnityとかC#のおはなしです~

Unity n秒後に遅れて処理する

こんにちは。レモンティーです。

今回は、Unityで、n秒後に処理を実行する方法を書いていきたいと思います。

大きく分けて三通りの方法を紹介します。

(A)Invokeメソッドを使う
(B)Updateでカウントダウンする
(C)コルーチンを使う

の三つです。
さっそく見ていきましょう。

(A)Invokeメソッドを使う

Invokeメソッドの引数はこうなってます

Invoke(string methodname, int time);

なので、
例えば、Sampleという名前のメソッドを5秒後に呼び出したい時は

Invoke("Sample", 5);

と書けばいいわけですね。




(B)Updateでカウントダウンする

次のように書きます。

using System.Collections;

using System.Collections.Generic;

using UnityEngine;



public class WaitNminutes : MonoBehaviour {

    float TimeCount = 15;
	
	
      void Update () {

                TimeCount -= Time.deltaTime;

  
      
                if(TimeCount <= 0)
                {
                //ここに処理
                //TimeCount = 15;
                 }
	   
       }

}

Time.deltaTimeは前フレームからの経過時間ですから、
このスクリプトだと、約15秒たつと変数TimeCountが0になり、
処理が行われます。
コメントアウトしている位置でTimeCountを設定するようにすれば
15秒に一回処理…というスクリプトに変わります。
他の位置で設定すれば、そこからカウントできます。




(C)コルーチンを使う。

コルーチンの詳しい説明は省き、使い方のみ書きますと…

まず、よびだすには

 StartCoroutine(Sample());

こんな感じで書きます。
これだと、Sampleという名前のコルーチンが実行されるわけです。

肝心のコルーチン本体は

IEnumerator Sample()
    {
        //ここにコルーチンの処理
    }

このように書きます。

n秒待つ処理は

yield return new WaitForSeconds(float n);

と書きます。

なので、命乞いをさせるために三分間待ってあげる処理は

IEnumerator Sample()
    {
   Debug.Log("三分間待ってやる");
      yield return new WaitForSeconds(180f);
      Debug.Log("時間だ。答えを聞こう。"); 
    }

と書けますし、

カウントダウンは

IEnumerator Sample()
    {
   Debug.Log("3");
      yield return new WaitForSeconds(1f);
      Debug.Log("2");
      yield return new WaitForSeconds(1f);
      Debug.Log("1");
      yield return new WaitForSeconds(1f);
      Debug.Log("Start!");
    }

こんな風に書けますね。


今回の記事は以上です。



関連

sawalemounity.hatenablog.com