📝
[Unity]Time.deltaTimeを使うタイミング
結論
ネット上には、 Time.deltaTime
に関する様々な情報が転がっていますが、
「void Update()の中で、 Input.GetAxis("Vertical")
や moveSpeed
などを使用し、座標を更新するための(何か増減があるもの)パラメータ(座標、速度、加速度)には必ず必要」
が私の結論です。
使用例
void Update()
{
float tate = Input.GetAxis("Vertical") * Time.deltaTime * moveSpeed;
float yoko = Input.GetAxis("Horizontal")* Time.deltaTime * moveSpeed;
// transformを取得
Transform myTransform = this.transform;
// 座標を取得
Vector3 pos = myTransform.position;
pos.z += tate;
pos.x += yoko;
myTransform.position = pos;
}
Time.deltatime
そもそも、Time.deltaTime
は、 前回のフレームからの経過時間(秒)を表す変数で、何かしらに掛け合わせることで使用します。
1フレームごと1マス進むシステムがあった時に、速いPCと遅いPCでは1秒間に、以下のようにすすむ。
速いPC:1フレーム0.01秒) 100マス
遅いPC:1フレーム0.1秒 ) 10マス
ハードウェアに依存したシステムは良くないということで、この移動量に Time.deltaTime
を掛け合わせて調節します。調節した結果、
速いPC:1フレーム0.01秒) 1マス * 0.01(Time.deltaTime:前回のフレームから0.01秒かかっているので) *100 = 1マス進む
遅いPC:1フレーム0.1秒 ) 1マス * 0.1(Time.deltaTime:前回のフレームから0.01秒かかっているので) *10 = 1マス進む
結果、Time.deltaTime
をかけることでハードウェアに依存せず、1秒間に1マス進むシステムが完成する。
ただ、今の状態だと、本来進むはずだった、100マス,10マスが失われているので、そこは別途 moveSpeed
などの変数を追加して調節する。
float tate = Input.GetAxis("Vertical") * Time.deltaTime * moveSpeed;
float yoko = Input.GetAxis("Horizontal")* Time.deltaTime * moveSpeed;
調節したのは上のようになる。
Discussion