質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

2270閲覧

Time.fixedDeltaTimeについて。

退会済みユーザー

退会済みユーザー

総合スコア0

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2018/12/23 15:59

前提・実現したいこと

こちらのサイトでは、
FixedUpdate()のMovePositionのコードに、Time.deltaTimeを使っていますが、
FixedUpdate()のインターバルは、Time.fixedDeltaTimeだと思うので、
本当は、Time.fixedDeltaTimeを使った方がよいと考えてよいですか?

C#

1void FixedUpdate(){ 2 rigid.MovePosition(transform.position + transform.forward * speed * Time.deltaTime)

参考にしているサイトのコードで、FixedUpdateの中でTime.deltaTimeを使うのは間違いと考えてよいですか?
ご教示お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

いえ、Time.deltaTime - Unity スクリプトリファレンスによると...

When called from inside MonoBehaviour's FixedUpdate, returns the fixed framerate delta time.

MonoBehaviourのFixedUpdate内で呼び出した場合、固定フレームレートのデルタ時間を返します。

とのことですので、間違いというわけではないかと思います。
また、Time.fixedDeltaTime - Unity スクリプトリファレンスには...

For reading the delta time it is recommended to use Time.deltaTime instead because it automatically returns the right delta time if you are inside a FixedUpdate function or Update function.

デルタ時間の取得には、代わりにTime.deltaTimeを使うことが推奨されます。これはFixedUpdate関数内でもUpdate関数内でも、自動的に正しいデルタ時間を返すためです。

との記述もありました。

下記のように、FixedUpdate内とUpdate内でTime.deltaTimeを取得してみると...

C#

1using UnityEngine; 2 3public class DeltaTimeTest : MonoBehaviour 4{ 5 private void FixedUpdate() 6 { 7 Debug.Log("F:" + Time.deltaTime); 8 } 9 10 private void Update() 11 { 12 Debug.Log("U:" + Time.deltaTime); 13 } 14}

下図のように、Update内では値が変動しますが、FixedUpdate内では一定の値が取得されています。
プレビュー

投稿2018/12/23 20:17

編集2018/12/23 20:24
Bongo

総合スコア10807

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/12/24 06:52 編集

ご回答ありがとうございます。 なるほど、FixedUpdate内でも、Time.deltaTimeでFixedUpdateの正しいデルタ時間が取得できて、しかも、FixedUpdateでTime.deltaTimeを使うことが推奨されているのですね。 逆に、Time.fixedDeltaTimeを使う機会はいつなのか?という疑問も湧きましたが、 Update内でもFixedUpdate内でも、Time.deltaTimeを使っていきたいと思います。 ご検証もしていただきありがとうございました。 理解できました。 Time.deltaTimeがUpdate内とFixedUpdate内とで取得される時間が変わるというのは驚きました。
Bongo

2018/12/24 09:12

念のため確認したものの、FixedUpdateに限らずWaitForFixedUpdateのタイミングで回しているコルーチンとかOnCollisionStayの中でも、Time.deltaTimeの値はちゃんとTime.fixedDeltaTimeと同じ固定時間になるようです。となると、いよいよTime.fixedDeltaTimeの出番はいつなのか分からなくなってしまいますね... Time.fixedDeltaTimeを使う場面を無理やり考えてみると、Time.fixedDeltaTimeが小さく設定されていてUpdateよりもFixedUpdateがずっと多く実行されるという状況で、Update内で取得した値(プレイヤーからの入力など)をFixedUpdate周期に合わせた値に加工(ここでTime.fixedDeltaTimeを使用)して、それをFixedUpdate内で使う...などでしょうか。 つまり、FixedUpdateでの計算量を削減するためにFixedUpdate以外のメソッド中でなるべく事前計算したいという場面では、Time.fixedDeltaTimeを使うことがあるかもしれません。
退会済みユーザー

退会済みユーザー

2018/12/24 11:20

ご回答ありがとうございます。 Time.deltaTime、万能ですね。 基本的には、Time.deltaTimeを使うと覚えることができて、すっきりしました。 なるほど、事前にFixedUpdate以外で計算するときに使えますね。 勉強になりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問