Time.deltaTimeって結局なんなの?

こんにちは〜

今日はちょっとした検証ブログです(笑)

みなさん時間計測って何でしてますか?

自分はTime.timeを基本的に使います。

こちらのページにも書いたんですけど、これが一番計測しやすいかなぁと。。。

で、Time.deltaTimeというものもあるけどこれ結局なんなん?っていうお話。

じゃあまずは公式サイトをみてみますか。

https://docs.unity3d.com/ja/current/ScriptReference/Time-deltaTime.html

最後のフレームを完了するのに要した時間(秒)(Read Only)

この関数を使用してゲームのフレームレートを独立させます。

何回見ても理解できないのは自分だけなのだろうか。。。

で、実際調べても、この値を掛けると端末に依らず一定の速度で移動させれますよ〜的な文章書いてるんですよ。

例えば、

transform.position += Vector3.up * Time.deltaTime;

と書くと、どの環境でも1秒間で1だけ上に上がる、と。

まぁそれならへぇ〜そうなんだ、で使えばいいんですけど、問題は過去にあった出来事。

とあるゲームを作成していた時に、タイマーをこの関数で使用したんですね。

float timer = 0;

void update(){

    timer += Time.deltaTime

}

こんな感じで。

そして、複数端末を同時に計測開始させ、経つこと約4分

片方の端末では4分経ったのですが、もう片方の端末はまさかのまだ3分しか経っていない!!

いや・・・何故?(笑)

ということがあったので、この関数信頼できないと言いますか。。。

まぁ、今回やりたいのは一つ

Time.timeとTime.deltaTimeを同時に計測したら、同じ値を表示しますよね??という検証(あれ本題ここから())

用意するのは(大体)こんな感じのコード

float time_timer = 0;
float delta_timer = 0;

void Start(){
    time_timer = Time.time; //ゼロ合わせする為
}

void Update(){
    delta_time += Time.deltatime; //足す
    Debug.Log("Time.time : " + (Time.time - time_timer) + "\n" + 
              "Time.deltaTime : " + delta_timer);
}

大体、というのは、他にも処理を重くする感じのコードも入れるから。

まぁ、それでは見ていきましょう!o(^_^)o

まずは重くしないでやってみたもの

多少の誤差はあるけど、まぁずれてはいない

(ちなみにfpsの計算はこちらのサイトの2のやり方を採用してます)

そのまま1分経過しました。特に差が大きくはなりませんでした

では次に物理演算多用で重くしたもの

思ったよりかなり重くなった(?)

1分経過したけど特に変化なく。あれ?

ちなみに表示は1分ですけどリアルタイムでは1分ではありませんでした汗

ちなみにリアルタイム時間を入れたのがこちら。重たいの二回計測するのしんどい。。。

で、端末毎に計測時間がずれたのは片方は重たかったから。

・・・で解決すればいいんですけど、問題はこの現象、”Time.timeでは起こらなかった”んですよね。。。

何故。

あの時ずれたのは、やはり重たさが原因だったのかな。。。

解決しようと思って書いてたのに解決できなかった。謎なブログです。。。





↓もしこの記事が参考になったら、下のいいねボタンを押していただけると非常に助かります!(ログイン不要)↓

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です