今回はUnityのスクリプトで使う「Update」と「FixedUpdate」の違いのメモです。
はじめに
Unityのバージョンは2021.3.3f1です。(あまりバージョンは関係ないですが・・・)
過去、さまざまなスクリプトを作成していますが、特に意識することがなかった「Update」と「FixUpdate」を考えてみます。
UpdateメソッドとFixedUpdateメソッド
まずは下記の両方の公式リファレンスを確認。
簡単に言うと、Updateは「毎フレーム呼ばれる」に対して、FixedUpdateは「固定秒数ごとに呼ばれる」とあります。
使い分け
試しに下記スクリプトを実行、時間が異なることが分かります。
using UnityEngine; public class TimeManager : MonoBehaviour { void Update() { Debug.Log(Time.deltaTime); } }

簡単に言うと、定期的に実行されるのがFixedUpdate、環境により実行されるタイミングが異なるのがUpdateと言う感じですね。
一定間隔で実行されるFixedUpdateには入力からのラグが発生する可能性があるInput系はNG、逆にRigidbodyなどの物理的な処理をするのに向いているという感じですね。
過去の参考スクリプト
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」から変更可能。当然、間隔を短くすると負荷がかかる可能性がありますね。
