【Unity】フレームカウント厳禁! 代替策の Time.deltaTime
フレーム数でカウント禁止の理由
- 1秒60Hzで固定だった時代は今は昔
- PCはモニターのリフレッシュレートその他でフレーム数が変動する
- モニターのリフレッシュレートが110Hzなら1秒110フレームになる、など
- 60カウントで1秒のはずが、約0.55秒しかカウントされてない! となる
Unityでタイムカウントを行うときは Time.deltaTime
- Time.deltaTime は1フレーム更新にかかった秒数を返す
- Update() 内で deltaTime を加算し続けて値が1になった=1秒
使用例
自動回復するエネルギー
- Update() で 現在エネルギー += 1秒に回復するエネルギー * Time.deltaTime
目標タイムまでカウント
- Update() で if (count < 目標タイム) count += Time.deltaTime
他の代替方法
- コルーチンの WaitForSeconds(待機系)
- UniTask の async/await、UniTask.WaitForSeconds(待機系)
- UniRx の Observable.Timer(遅延実行系)
- DOTween の DOVirtual.DelayedCall(遅延実行系)