web-dev-qa-db-ja.com

UnityのUpdateとFixedUpdateの違いは何ですか?

UpdateメソッドとFixedUpdateメソッドの違いは何ですか?これらのメソッドはいつ使用する必要がありますか?

39
Kapil11

フォーラム から:

更新はフレームごとに1回実行されます。 FixedUpdateは、時間設定で設定される1秒あたりの物理フレームの数、およびフレームレートの速さ/遅さに応じて、フレームごとに1回、0回、または数回実行できます。

また、2つの違いの詳細な説明については、同じフォーラムのduckの回答を参照してください。

そのため、力、トルク、またはその他の物理学に関連する機能を適用するときにFixedUpdateを使用する必要があります。物理エンジン自体と正確に同期して実行されることがわかっているためです。

Update()は、物理エンジンによって、グラフィックがレンダリングエンジンに与える負荷の大きさに応じて、高速または低速で変化する可能性があります。物理的効果!

43
Rahul Tripathi

FixedUpdateは物理エンジンと連携するために使用されるため、Rigidbodyに適用する必要があるものはすべてFixedUpdateで発生するはずです。 Updateは、一方で、物理エンジンとは独立して動作します。これは、ユーザーのフレームレートが低下しても、実行を継続するために特定の計算が必要な場合に役立ちます。たとえば、チャットまたはvoipクライアントを更新する場合、定期的に古い更新が必要になります。

Unityには、Update vs FixedUpdateに関する素晴らしいビデオがあります: nity-Update vs. FixedUpdate

このサイトは、初心者のゲームプログラマーにとって素晴らしいリソースです。

38
Rickest Rick

他の回答に加えて、更新は物理計算レートではなくフレームレートに間に合います。これは、通常、何かがビジュアルを変更する場合、FixedUpdateではなくUpdateでそれを実行することを意味します。これにより、フレームがレンダリングされる瞬間に常に間に合うようになります。 FixedUpdateで計算したために滑らかに見えない動きがあったいくつかのケースに遭遇しました。

FixedUpdateで行わなければならないアップデートを行うための唯一の潜在的なコストは、特に低フレームレートに達した場合に物理的忠実度が低下する可能性があることです(ただし、一般的には修正する必要がある別の問題なので、通常はそうではありません) UpdateではなくFixedUpdateに何かを入れる正当な理由です)。

さまざまなスクリプトが更新を実行する順序を制御しようとしている場合、FixedUpdateはbarえるには不適切なツリーです。代わりに EarlyUpdate のようなものを見るべきです。

5
Semimono

ここでの回答のほとんどが、FixedUpdateが何のために、そしていつ使用すべきかを明確に説明していることに気付きました。ただし、通常のUpdateを使用する必要がある場合の明確な例はありませんでした。以下は nity公式チュートリアル からのものです。

Update()

  • すべてのframeと呼ばれます
  • :などの定期的な更新に使用されます
    • 非物理オブジェクトの移動
    • シンプルなタイマー
    • 入力の受信(キープレスなど)
  • 更新間隔の呼び出し時間は異なります。つまり、不均一な間隔です。

FixedUpdate()

  • 物理ステップごとに呼び出されます
  • FixedUpdate()間隔は一貫しています。つまり、等間隔です。
  • 物理(たとえば、RigidBody)オブジェクトの調整などの定期的な更新に使用されます
2
jfunk

Update():ビジュアルレンダリングで実行する必要があるコードが含まれています

FixedUpdate():物理相互作用と同期する必要があるコードが含まれています

ソース: https://youtu.be/noXtT_zN-84?t=3057

1
Raman Kumar