sound sepher's PASTIME

ゲーム開発で思ったことや、趣味などの話を書き綴っていきます。

【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(遅延実行系)

参考

qiita.com

www.shibuya24.info