UnityのTime関数あれこれ

(昔のブログの書き直しです)

使用したソフト

Macbook ver10.12.4

Unity4.6.0f3

こんにちは〜

今回はUnityのTime関数で、どれ使えばいいの?的な疑問があったので、いくつか検証

まずは、公式サイトの紹介(・_・;

https://docs.unity3d.com/jp/540/ScriptReference/Time.html

Time関数類はここにあります。

・・・とりあえず、紹介していきます

(普段使わなさそうなやつ、飛ばしますね(・・;))

Time.deltaTime

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

よく使う関数1つ目?

簡単に言えば、前のフレームから今のフレームまで何秒かかりました。と言うのが返されます。

大体0.017くらい?が毎フレーム返されますね

(timeScale依存)

余談ですが、足し算していくとリアル時間との経過時間がずれていくことがあるので、恐らくこれは物理エンジンなどの計算と組み合わせて使うものかと。

とあるゲームを作った際、ゲームの残り時間をこれで減算していると、端末間での残り時間がずれてしまい、マルチプレイなのに同時に終了しなかったという思い出があります。。。

ですので、マルチ等での時間計測にはあまりお勧めしません。(個人的な意見ですが)

Time.fixedDeltaTime

「Physics や (MonoBehaviour の FixedUpdate のような) 他の固定フレームレートの更新を実行するインターバル(秒)」

FixedUpdateとかに使うものですかね?

とりあえずUpDate関数内に入れて実行したら、0.02がひたすら返されました。

(FixedUpdateに入れても同じです)

(timeScale独立)

Time.fixedTime

「最新の FixedUpdate を開始した時間 (Read Only) 。これはゲーム開始からの時間(秒)です。」

説明文通りです。 FixedUpdate関数内で使うものですね。

(timeScale依存)

Time.frameCount

「経過したフレーム数の合計(Read Only)」

そのままですね。Update関数に入れると、呼ばれるたびに1カウントされるカウンター代わりになります(多分)

(timeScale独立)

Time.realtimeSinceStartup

「ゲーム開始からのリアルタイム(秒)(Read Only)」

綴りあってるか確認しづらいのとか、長いやつあんまり好きじゃないです…(・_・;

これも説明文通りですね。ゲーム起動時を0sとして、そこからの経過時間を返します。

注意点としては、アプリがバックグラウンドに行ったとしてもカウンターは止まらないことです。

例えば起動して5秒くらいで別アプリに切り替え、5分後に帰ってくると、これは305を返すと言うことです(例え要らない?(・_・;)

アプリ内のスタミナや、完了までの時間など、現実時間に影響して動くものに使えそうです。

(timeScale独立)

Time.time

「このフレームの開始する時間(Read Only)。ゲーム開始からの時間(秒)です。」

恐らくこれが一番使いやすいと個人的には思っています。

フレーム開始時なので、同じUpdate関数内で複数回呼んでも同じ値になります。

ちなみに、マルチプレイでも同じ値になるのがこちらです(笑)

(timeScale依存)

Time.timeScale

「時間の経過をスケールします。これはスローモーション効果で使用できます。」

各紹介の最後に書いている(timeScale依存)(timeScale独立)とは、この関数に影響されるかどうか、と言うことです。

この関数は、ゲーム内の時間の進み方を調節できますよ、と言うものです。

例えばこの値を2にすれば、ゲーム内の時間は2倍速になり、

0にすると、時は止まったような感じになります。

値は0〜100です

ちなみに注意点ですが、timeScaleを0にした際、物理演算はもちろんのこと、アニメーション等も止まってしまうので、使用する際にはご注意ください。

Time.timeSinceLevelLoad

「フレームが開始された時間 (Read Only) 。最後のレベルが読み込まれてからの時間 (秒) です。」

シーン切り替えしたら0に戻る点を除いてtimeと同じです(。-_-。)

(timeScale依存)

Time.unscaledTime

「このフレームの始まる timeScale に依存しない時間 (Read Only) 。これはゲーム開始からの時間(秒)です。」

Time.realtimeSinceStartupとの違いは、1フレーム間ならどこで呼んでも値は同じ、つまり同じ関数内ではどこで呼んでも同じと言うことです。

ついでに言えば、realtimeSinceStartupの方は1フレーム間でも時間が経つと値が変わります。

(timeScale独立)

以上、よく使いそうなTime関数一覧でした。

個人的には、

シングルプレイ:Time(物理エンジンを使うならdeltaTime)

マルチプレイ:Time

起動した瞬間からの時刻;unscaledTime

を主に使うかと。。。

間違い等、指摘はいくらでも待ってます←

それではまた〜( ´ ▽ ` )ノ





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

UnityのTime関数あれこれ」への2件のフィードバック

    1. コメントありがとうございます
      確かにそうですね・・・気付いていませんでした。修正します!

匿名 へ返信する コメントをキャンセル

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