updateとFixedupdateの違いについて【Unityメモ】

今回は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」から変更可能。当然、間隔を短くすると負荷がかかる可能性がありますね。

タイトルとURLをコピーしました