altebute.hatenablog.com

犬も歩けば規格にあたる

Unity 5 日記 3 deltaTime の適用

なんだか 前回 まで大真面目に記事を書いてたせいで新しく記事を書くのが億劫になってきてしまっていたので, 今回からもっと雑に書いていくことにする.

UnityEngine.MonoBehaviour を継承したクラスのメンバ関数 Update は毎フレーム呼ばれるが, 毎フレーム呼ばれるということはフレームレートの高い環境ではそのままではゲームの動作まで早くなってしまう. そこで, Time.deltaTime を乗算する事でこの問題を解決する.

void Update()
{
    var x_axis = Input.GetAxis("Horizontal");
    var y_axis = Input.GetAxis("Vertical");
    var vx     = x_axis * 60 * Time.deltaTime;
    var vy     = y_axis * 60 * Time.deltaTime;
    var v      = new Vector3(vx, vy, 0);
    this.transform.position += v;
}

Time.deltaTime には前回のフレームから今回のフレームまでに経過した時間が秒単位で保持されている. 型は float である.

FPS が 60 の環境である事を前提にフレームカウンタを回して任意の動作を実行するようなアルゴリズムを実行した場合は, Time.time の差分を取るか, Time.deltaTime を毎フレーム加算して, 大小の比較演算によって実行する必用がああるだろう. 浮動小数点であるから, 同値比較を行うと危険である事に注意.