「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;
}
}