【Unity】Time.deltaTimeとは?前のフレームからの経過時間を表す変数

deltaTimeとは? Unity

こんにちは、ともくんのゲーム作り部屋にようこそ!

このページでは、

「UnityのTime.deltaTimeってなに?」

「Time.deltaTimeってどうやって使うの?」

というお悩みの方に向けた内容となっています。

Unityでは、ゲーム内での時間を計測するのにいくつか方法がありますが、最もポピュラーなのがTime.deltaTimeを使う方法です。

Time.deltaTimeとは、前のフレームから次のフレームまでの経過時間を表している変数のことです。

このTime.deltaTimeを使うことで、ゲーム内での経過時間に合わせて処理を分けることができるようになります。

そこで、このページでは、UnityのTime.deltaTimeについて、仕様や特徴、また使い方までをまとめていきます。

この記事を書いた人

ゲーム作りを学び始めた一児のパパです。
このブログは、子供から「ゲームを作ってみたい!」と言われ、非プログラマーでゲーム作りをしたことない僕が、ゲーム作りの本を読んで独学でゲーム開発を学んでいるブログです。
同じように初めてゲーム作りをしている方と一緒に学んでいけるようなブログに出来たらいいなと思っています。
また、「このコードはおかしい」とか「もっと良い書き方があるよ!」などあれば、どんどん指摘して頂けると助かります。

Time.deltaTimeとは?

まずは、Time.deltaTimeがどういうものなのかを紹介していきます。

前のフレームからの経過時間を表す変数

Time.deltaTimeとは、UnityのTimeクラスで定義されているdeltaTimeという変数で、この変数は前のフレームと今のフレームまでの経過時間を表す変数になっています。

ゲームは、1枚1枚の静止画であるフレームを何枚も切り替えることで出来上がっていて、1秒間に表示される枚数をFPSという単位で数えています。

例えば、60FPSのゲームであれば、1秒間に60回フレームが切り替わることになるので、1フレームは1/60秒で進むことになりますが、実際はパソコンのスペックやゲーム内での負荷などにより、一定には進んでくれません。

このdeltaTime変数は、実際に前のフレームから今のフレームまでに何秒経過したのか秒数で表してくれる変数です。

なおdeltaTime変数は、秒数をfloat型の数値データで管理しています。

時間計測を使った処理を作れる

このdeltaTimeの変数を使うことで、ゲーム内での時間経過を使った様々な処理を作ることができます。

具体的には、このdeltaTimeをフレーム毎に呼ばれるUpdateメソッド内で加算してあげることで、ゲーム内での実際の経過時間が分かるようになり、その時間に応じて処理を加えることができます。

例えば、

  • ゲーム内に制限時間を設けてその時間内にクリアできるか
  • 一定時間の間隔ごとに敵から攻撃が出てくる

といったようなゲーム内での仕組みを、Time.deltaTimeで作っていくことができます。

Time.deltaTimeの使い方

ここからは、Time.deltaTimeの使い方について紹介していきます。

Updateメソッド内で加算して使う

Time.deltaTimeで経過時間を取得する際は、Updateメソッドの中でフレーム毎に加算してあげることで、秒数を計測していくことができます。

using UnityEngine;

public class Test : MonoBehaviour
{
    float delta;  // 経過時間を計測する変数

    void Update()
    {
        delta += Time.deltaTime;    // フレーム毎の経過時間を加算
    }
}

5行目で秒数を計測する変数としてdeltaを宣言して、Updateメソッドの中の9行目でフレーム毎にこの変数にTime.deltaTimeの秒数を加算してあげることで、実際の経過時間が計測されていきます。

以下は、UIに変数deltaの数値を表示しているもので、ゲームが実行してからの経過時間が計測出来ているのが分かります。

さらに、この変数のtimeに条件指定してあげることで、ゲーム内で制限時間を作ったり、経過時間に合わせた処理などを作ることができます。

一定間隔毎に処理を行う方法

また、Time.deltaTimeを使うことで、一定秒数毎に処理を行うということもできるようになります。

例えば、

などといった処理をTime.deltaTimeを使うことで、作ることができます。

using TMPro;
using UnityEngine;

public class Test : MonoBehaviour
{
    float delta;  // 経過時間を計測する変数
    float time = 2.0f;  // 処理間隔を決める変数(2秒間隔)

    void Update()
    {
        delta += Time.deltaTime;    // フレーム毎の経過時間を加算

        if (delta > time)   // 経過時間が2秒を超えた場合
        {
            // 処理内容を記載 //
            delta = 0;  // 0にリセットする
        }
    }
}

作り方としては、先ほどと同じように経過時間を計測する変数deltaと、7行目で処理間隔の秒数を表す変数timeを作り、13行目でdeltaがtimeを上回ったタイミングで、処理が行われて同時にdeltaを0に戻すように記述してあげます。

このようにしてあげることで、deltaは再度0から経過時間を足し上げていき、timeの2を上回る度に処理が行われることになるので、2秒ごとにそのゲーム処理が行われるようになります。

まとめ

このページでは、Unityで使われるTime.deltaTimeについて、どんな仕様や特徴なのか、使い方までをまとめていきましたが、いかがでしたでしょうか?

Time.deltaTimeは、Unityで定義されているTimeクラスのdeltaTimeという変数で、前のフレームからの経過時間を表している変数です。

このTime.deltaTimeを使うことで、ゲーム内で経過時間を計測することができ、その時間に合わせた処理を行うことができるようになります。

また、処理ごとに経過時間をリセットしてあげることで、一定間隔で処理を行うことができるようになります。

最後までお読みいただきまして、ありがとうございました!

コメント