【Unity】 Time.deltaTimeの罠

小ネ・・・タ?割と深刻なネタ。

Time.deltaTimeは前フレームからの経過時間(秒)を示す変数だが、
実はこんな罠がある。

[Edit]→[Project Settings]→[Time]からTimeManagerを開き、
Maximum Allowed Timestepという値があるかと思う。

実はTime.deltaTimeは、この値以上にはならない。

おそらくデフォルトだと 0.3333333 が入っているかと思うが、
60フレーム想定だとたった2フレーム分より重い処理になってしまうと
全て0.3333333でTime.deltaTimeが丸められる。


この事で計算が狂う処理も中にはあるだろう。
自分も今日これにやられたのだが、「えっ、何で丸められるの?」という感じ。

公式ではこのMaximum Allowed Timestepの説明があるが、
おそらく物理演算系に影響していると思われる。

タイム マネージャ / Time Manager


インスペクタでEnumの値の変更をしている時なんかに、Gameビューの動きが止まる事があるが
また動き出すまでの時間が長いと、Time.deltaTimeはそれに合わせて大きい値になるのが当然なのだが、
このMaximum Allowed Timestepに丸められて正確な値にならない場合もある。

本来、デルタタイムというのは丸められるべきではない絶対的な値だと思うのだが、
Unityではどうもそういう仕様らしい。


自分はとりあえずこのMaximum Allowed Timestepを適当に10にしてみたが
物理の挙動がおかしくならないか心配でたまらないw

でも流石に0.3333333に丸められるのはおかしいと思う。
それを上回る処理負荷が掛かる場面はかなりあるはずだ。


アプリ側で自前でデルタタイムを計算して使ったほうがいいのかもしれない、と思った。

[ 2013年10月30日 21:24:14 : Unity ]

カレンダー

プルダウン 降順 昇順 年別

06月 | 2020年07月 | 08月
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -


全記事表示リンク

全ての記事を表示する

検索フォーム

リンク