oniyarai’s tech memo

oniyarai’s tech memo

すぐ忘れる自分に捧げるメモ

Unityの処理停止について

Time.timeScale について止まるもの止まらないもの

Unityで停止処理を行う際に使えるのが、Time.timeScaleですが、止まる処理と止まらない処理がある。
Time.timeScaleは基本的に1で通常時間、0に近づくにつれて時間の経過をスローにしていくことができる。
0にすると、時間関連を停止することができ、FixedUpdateが呼ばれなくなる。また、Time.deltaTimeによる時間経過も進まなくなる。
ただし、Updateは変わらず呼ばれるため、Update内の処理でTime.deltaTimeを加味していない場合止まらない。


止まる処理

    void Update() {
        transform.Translate(2.0f * Time.deltaTime, 0, 0);
    }
}

止まらない処理

    void Update() {
        transform.Translate(2.0f , 0, 0);
    }
}

Rigidbodyへの操作は内部的に経過時間が加味されているため、重ねてTime.deltaTimeを加味していなくても止まる。最も、本来Rigidbody操作はFixedUpdateでやるべきなのでどちらにせよFixedUpdateは呼ばれないけれども。


追記
パーティクルシステムも止まってしまうので使いづらい……メニュー開いたときとかに止める用かな。