こんにちは〜
今日はちょっとした検証ブログです(笑)
みなさん時間計測って何でしてますか?
自分は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では起こらなかった”んですよね。。。
何故。
あの時ずれたのは、やはり重たさが原因だったのかな。。。
解決しようと思って書いてたのに解決できなかった。謎なブログです。。。
↓もしこの記事が参考になったら、下のいいねボタンを押していただけると非常に助かります!(ログイン不要)↓