deltatime(コピペ率が高いので要調整)

一定の時間で処理をしたいことってありますよね?そんな時、deltatimeを使えば非常に簡単に実装できます!

この記事では、

  • deltatimeとは
  • timeとの違い
  • deltatimeの使い方

というように、基本的な内容から少し応用的な内容までわかりやすく解説します!

目次

deltatimeとは

deltatimeとは時間の取得に使われる関数のことです。取得される値は少し変わっています。deltatimeを使った場合、最後のフレームからの経過時間が取得されるのです。

deltatimeは、フレームごとに呼び出されるUpdate関数の中で使われることが多いですね。

取得される時間の単位は「ms(ミリセカンド)」です。「ms(ミリセカンド)」は1/1000秒のことですので、非常に小さな値が取得されます。

timeとの違い

deltatimeと似ているものとしてtimeという関数があります。どちらも時間を扱いますので似てはいますが、明確な違いがあります。deltatimeとtimeでは取得される時間が異なるという点です。

deltatimeは最後のフレームからの経過時間が取得されました。その一方でtimeはゲーム起動からの経過時間が取得されます。このように、deltatimeとtimeは違った処理をしますので状況に応じてうまく使い分けましょう。

実際に使ってみよう!

今回この記事ではdeltatimeを使った移動と経過時間の表示を紹介したいと思います。まずはdeltatimeを使った移動からやっていきましょう。

処理落ちが影響しない移動方法

スクリプトと動かしたいオブジェクトを作ってください。作ったらスクリプトをオブジェクトにアタッチしましょう。コードを書いていきます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour {

  void Update() {
    Vector3 pos = transform.position;
    pos.x += 1 * Time.deltaTime;
    transform.position = pos;

    }
}

実行結果は、

一定の速度でオブジェクトを動かせていますね!

コードの説明をしていきましょう。今回はUpdate関数の中に処理を書き込んでいきました。Update関数はフレームごとに呼び出される関数でしたね。

まず、Vector3型の変数posを作って、スクリプトがアタッチされているオブジェクトの位置を格納します。次にposのx座標に 1 * Time.deltaTimeを加算させ移動距離を格納します。最後にオブジェクトに posの値を代入することで移動させます。

pos.x += 1 * Time.deltaTime;

の部分が少し複雑なので、もう少し説明しましょう。ここで使われている1という数字は1秒間に進む距離を表しています。早く進ませたければこの数字を変更してください。

ここでは1にTime.deltaTimeをかけています。その理由はPC環境ごとにスピードを変えないためです。

Time.deltaTimeをかけずに

pos.x += 1 ;

とした場合について考えてみましょう。この部分はUpdate関数の中で呼ばれていますので、毎フレームごとに呼ばれます。

しかし、PC環境によって1秒間に呼ばれるフレームの回数は異なります。例えば、1秒間にフレームが100回呼ばれるPCと20回しか呼ばれないPCがあったとします。100回の方ではpos.x += 1が100回呼ばれ+100されますが20回の方では+20しかされません。

今回のコードではpos.xで速さが決まっていたので、PC環境によって速さが違うことになります。仮にこれがレースゲームだった場合、あまりにも不公平ですね。PC環境によって速さが違うことが無いようにTime.deltaTimeをかけているのです。

Time.deltaTimeをかけることにより、PC環境に依存することなく同じ速さで移動できます。

正確な経過時間を表示してみよう

次は経過時間を表示させてみましょう。先ほどのコードを以下のように書き換えてください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour {

private float time;

 void Update () {
       time += Time.deltaTime;
       Debug.Log(time);
 }

}

実行結果は、

きちんと経過時間を表示できていますね!今回はログに表示させるだけでしたが、テキストに反映させたい場合は下記の記事を参考にしながら作ってみてください。

まとめ

いかがでしたか?今回はdeltatimeについて紹介してきました。

deltatimeを使えば時間に関する処理が簡単にできますので、ぜひ使いこなしてみてください!

この記事を書いた人

学生時代を含めると、かれこれ10年以上プログラマーとして過ごしています。
様々な言語や環境、プロジェクトに関わってきましたので、より実践的な記事をみなさんにお届きるよう情報発信していきます!

目次