Time.deltaTime

概要

Time.deltaTimeには1フレーム前からの経過時間が保存されています。
この時間を利用することで、オブジェクトのフレーム経過による変化を一定に保つことができます。

Time.deltaTimeの有無による計算量の比較

例: オブジェクトの座標の値1を1mと仮定して1秒で50m進ませる Time.deltaTimeを使用しない場合の1フレームでの移動量 ・FPSが60の場合 移動量 = 50m * 1 / 60 // 50 * 0.016 座標 += 移動量; ・FPSが30の場合 移動量 = 50m * 1 / 30 // 50 * 0.032 座標 += 移動量; ・FPSが120の場合 移動量 = 50m * 1 / 120 // 50 * 0.008 座標 += 移動量; Time.deltaTimeを使用した場合の1フレームでの移動量 ・FPSが60の場合 移動量 = 50m * Time.deltaTime // 50 * 0.016 座標 += 移動量; ・FPSが30の場合 移動量 = 50m * Time.deltaTime // 50 * 0.032 座標 += 移動量; ・FPSが120の場合 移動量 = 50m * Time.deltaTime // 50 * 0.008 座標 += 移動量; 上記の例全て1秒後の座標は移動前と比較して約50m進んでいることになります。

Time.deltaTimeを使用する理由

deltaTimeを使用する理由は「1秒間の時間の精度の高さ」を保障してくれるからです。 上の例でTime.deltaTimeを使用した場合と使用しなかった場合の移動量は 同じになると書きましたが、これは計算上の話です。 実際のゲーム、特にスマホなどではUnityで作られた本格的な3Dゲームで 120FPSや60FPSを常に出すことは難しいです。 この時にTime.deltaTimeを使用しないケースでは目標とするFPSを下回るので 1秒間に移動する移動量が低下しますが、 Time.detaTimeを使用した場合は、きちんと1秒間で必要とする移動量になるよう、 調整された数値が格納されるので、安定した挙動が望めます。 例: 移動量:1秒間で50m移動 本来の設定:60FPS 実際のFPS:50FPS ・Time.deltaTime未使用 1フレームの移動量 = 50m * 1 / 60 // 0.83333 1秒間で移動する量 = 50FPS * 1フレームの移動量 // 41.66 ・Time.deltaTime使用 1フレームの移動量 = 50 * Time.deltaTime依存 1秒間で移動する量 = 50FPS * 1フレームの移動量 // 50 ※1フレームの移動量は毎フレーム異なるので一定ではありません。