123
92

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Unity] 一定の時間間隔で処理を実行する方法まとめ(時間制御)

Last updated at Posted at 2015-12-28

いわゆる、タイマの張り方。

Time.deltaTimeを使う方法

Time.deltaTimeには、最後のフレームからの経過時間[ms]が格納されています。
つまり前回のUpdate()からの経過時間がとれます。

Update()が実行されるたびに経過時間を積み上げていき、指定した時間を超えたら望みの処理を実行するようにします。

// timeOut[ms]毎に処理を実行する
public class ExampleClass : MonoBehaviour {
	public float timeOut;
	private float timeElapsed;

	void Update() {
        timeElapsed += Time.deltaTime;
        
        if(timeElapsed >= timeOut) {
        	// Do anything
        	
        	timeElapsed = 0.0f;
        }
    }
}

またdeltaTimeは、 FixedUpdate() 内で取得すると前回のFixedUpdate()実行からの経過時間が取得できます。

Time.timeを使う方法

Time.timeにはアプリケーション起動からの経過時間[ms]が格納されています。
Time.time + タイムアウト時間 をトリガーに処理を実行することでタイマーを実現します。

// timeOut[ms]毎に処理を実行する
public class ExampleClass : MonoBehaviour {
	public float timeOut;
	private float timeTrigger;

	void Update() {
		if(time.Time > timeTrigger) {
			// Do anything
			
			timeTrigger = Time.time + timeOut;
		}
	}
}

ただ特に理由がなければdeltaTimeを使えば良いです。
使いどころとして思いつくのは、Update()やFixedUpdate()の更新タイミングとは違う処理時間でタイマ張りたい場合。。(あるのかな?)

StartCoroutine() + WaitForSeconds()を使う方法

StartCoroutine関数を使うことで似非マルチスレッドっぽい動作が可能です。
並列実行させたい関数(例:下のFuncCoroutine関数)を作り、StartCoroutine関数に参照を渡すと並列実行されます。
その呼び出し先に無限ループ&waitを入れることで、一定間隔の繰り返し処理が実現できます。
StartCoroutine()自体は実行後すぐに返ってきますので、呼び出し先の処理が重くなりそうな場合にボトルネック化を防げます。

// timeOut[ms]毎に処理を実行する
public class ExampleClass : MonoBehaviour {
	public float timeOut;

	void Start() {
		StartCoroutine( FuncCoroutine() );
	}
	
	IEnumerator FuncCoroutine() {
		while(true){
			// Do anything
			
			yield return new WaitForSeconds(timeOut);
		}
	}
}

呼び出し先の関数は返戻値がIEnumarator型でなければいけないのですが、yieldとともに使える待ち時間作成関数WaitForSeconds()がありますので、これを使いましょう。

123
92
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
123
92

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?