スクリプト内のUpdateとFixedUpdateの動作の違いと使い分け|Unityメモ

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

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