【Unity】ポーズ中にコルーチンを使う方法

「Time.timeScale = 0」でポーズしている際に、コルーチンを使う時のポイント。

遅延処理で使うInvokeには、unscaledTime(リアルタイム)で動作する物がない。
ポーズ中には、以下のようにコルーチン等で設定する。

Invokeのように待機時間を指定してタイマーとして使用

  • コルーチンのyield returnの部分を「yield return new WaitForSecondsRealtime」に変更する。

	float delay = 1.0f;
	IEnumerator Coroutine () {

  		yield return new WaitForSecondsRealtime(delay);

		//ここに実行したい処理

	}

経過時間を使用する場合

Slerp等で、経過時間が必要になる場合。

  • elapsedTimeに加算するdeltaTimeを「Time.unscaledDeltaTime」に変える。
  • コルーチンのyield returnの部分を「yield return new WaitForSecondsRealtime」に設定。
    または「yield return null」に変更。


	float elapsedTime = 0;
	float duration = 1.0f;
 	float interval = 0.01f;

	IEnumerator Coroutine () {

		elapsedTime = 0;


		while (true) {

			elapsedTime += Time.unscaledDeltaTime;

//			ここに実行したい処理

			if (duration < elapsedTime) {

//				ここに終了時の処理

				yield break;
 			}

 
			yield return new WaitForSecondsRealtime(interval);
//こっちでもOk。
//			yield return null;
		}
	}

タイトルとURLをコピーしました