📝

[Unity]Time.deltaTimeを使うタイミング

2022/03/15に公開

結論

ネット上には、 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