今回はUnityのスクリプト内で使う「Update」と「FixedUpdate」の違いについてのメモです。
はじめに
Unityのバージョンは2022.3.14f1です。(あまりバージョンは関係ないですが・・・)
スクリプト内で利用する「Update」と「FixedUpdate」の違いと、どちらを利用するのが適切なのかを考えていきます。
UpdateメソッドとFixedUpdateメソッド
まずは両方の公式リファレンスを確認します。
簡単に言うと、Updateは「毎フレーム呼ばれる」に対して、FixedUpdateは「固定秒数ごとに呼ばれる」とあります。
使い分け
試しに下記スクリプトを実行してみます。
using UnityEngine; public class TimeManager : MonoBehaviour { void Update() { Debug.Log(Time.deltaTime); } }
時間間隔が異なることが分かります。
簡単に言うと、定期的に実行されるのがFixedUpdate、環境により実行されるタイミングが異なるのがUpdateと言う感じですね。
一定間隔で実行されるFixedUpdateには、物理的な処理をするのに向いており、UpdateにはInput系が向いているという感じです。
参考スクリプト
入力をキャッチするInput系はUpdateで扱う
private void Update() { float InputX = Input.GetAxisRaw("Horizontal"); }
物理処理はFixedUpdateで扱う(下記はRigidbodyのAddForce)
private void FixedUpdate() { Vector3 movement = new Vector3(movementX, 0.0f, movementY); rb.AddForce(movement * speed); }
FixedUpdateの実行間隔(秒数)は初期で0.02秒ですが、「ProjectSettings」→「Time」→「FixedTimestep」から変更可能。当然、間隔を短くすると負荷がかかる可能性がありますね。