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

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

ただいまの
回答率

90.35%

  • C#

    9667questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Unity

    6012questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • Unity3D

    1977questions

    Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

<Unity> Time.deltaTimeを処理に加える必要性はあるのでしょうか?

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 115

yunity

score 17

解説サイトなどを見ていると、オブジェクトを動かする時、ちょくちょく * Time.deltaTime を使って時間調整をしようとしてるのを見かけます。
オブジェクトをプレイヤー環境に左右されることなく、スムーズに移動させるため、なのでしょう。
ただ、これなのですが、もし、FixedUpdate内で処理している場合、「* Time.deltaTime」で時間調整する必要はあるんでしょうか?

私の調べた範囲では、updateはキー入力の時だけ使って、他はFixedUpdateを使った方がいい、とのことなので、通常はほぼ、FixedUpdateを使ってると思います。だとすると 「* Time.deltaTime」はそんなに出番ないように思うのですが、これを使ってる人が多いのはなぜなのでしょうか?

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

この話、私も気になって少し調べてみましたが色々な記事を見たところ、FixedUpadate内でTime.deltaTimeを使う必要性はほぼないようです。

ただし、FixedUpadateが常に一定の間隔で処理されるのか?という点では、高負荷環境下ではそうでもない、ということでした。参考URL【Unity検証】FixedUpdateは本当に一定間隔なのか
その為、一応使用しておけば確実。のように保険的な側面で使用されているのではないでしょうか。

Time.deltaTimeをよく使う理由としては、フレームレートでの処理にするか、もしくは秒単位での処理にするか、という点で使用されているようです。Time.deltaTimeを使用しない場合、フレームレートでの処理となるので、マシンの性能差によって影響が出ます。これはタイムカウントなどの処理をTime.deltaTime使わずに行っていた場合、性能がいいマシンの方が同じ手順を踏んでも結果がよくなる、という欠陥が生まれます。参考URL【Unity】「Time.deltaTime」を使わないといけない理由を説明する
そういった理由からよく使用されているわけですね。

私自身もこの話は未熟なため、間違ったとらえ方をしているかもしれませんが、概ねこのような話だと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/08/14 11:31

    大変失礼しました、Time.deltaTimeでも問題無かったです。
    Time.deltaTime側のリファレンスにその旨ばっちり書いてありました。
    https://docs.unity3d.com/ja/current/ScriptReference/Time-deltaTime.html
    >When called from inside MonoBehaviour's FixedUpdate, returns the fixed framerate delta time.
    (逆にFixedUpdate内で「前回のUpdateからの経過時間」が欲しかったらどうするんだろうとは思いますが……使用頻度低いのでどうしても必要ならUpdate内で取得して変数に入れとけってことなのかもしれません)

    あと数値が増加するというのは「Time.fixedTime」のことかもしれません。こちらは「最新のFixedUpdate を開始した時間(ゲーム開始から何秒後か)」なので増えていきます。

    キャンセル

  • 2019/08/14 13:09

    実際に試してみたところ、こういう結果になりました。

    Time.fixedDeltaTimeとTime.deltaTimeについて
    FixedUpdate内で以下を呼んだ場合

    Time.deltaTime→適切な値(Time.fixedDeltaTime)を返す
    Time.fixedDeltaTime→固定フレーム秒を返す

    Update内で以下を呼んだ場合

    Time.deltaTime→適切な値(可変フレーム秒)を返す
    Time.fixedDeltaTime→固定フレーム秒を返す(Updateが呼ばれるまでにかかった時間とは無関係)

    FixedUpadate内で「前回のUpdateからの経過時間」を求めるにはTime.deltaTimeを変数に代入して++する...といった疑似的な方法でしか計れなさそうですね。

    キャンセル

  • 2019/08/15 04:11

    回答と補足ありがとうございます。
    なるほど、Time.deltaTimeはまずは保険という面で使用しておきます。
    ちょっと、会話のやり取りが難解であまりついていけてないですが、私の利用レベルだとTime.deltaTimeで問題なさそうですね。
    ありがとうございました。

    キャンセル

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

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • C#

    9667questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Unity

    6012questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • Unity3D

    1977questions

    Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。