UpdateとFixedUpdateの違い
関数 | 概要 |
---|---|
FixedUpdate | 固定された間隔で呼ばれる |
Update | 毎フレームの更新時に呼ばれる |
LateUpdate | Updateの後に呼ばれる |
Update
は1フレーム毎に呼ばれる関数で、間隔は処理能力に依存するので一定ではありません。
対してFixedUpdate
は固定された間隔で呼ばれる関数になります。
また、 LateUpdate
というものもあって、こちらは各フレームの最後に実行されます。
フレーム毎の処理の違いをより具体的に説明すると、
FixedUpdate
は処理落ちした場合1フレームに複数回実行されて帳尻を合わせるという挙動を行います。Time.fixedDeltaTime
の値は固定のまま、実行回数で調整しているUpdate
は処理落ちした場合にはそのフレームでは実行されず、次のフレームでTime.deltaTime
の値が変動する事で調整される
のようになっています。
使い分け
使い分けとしては、物理挙動の更新が時間進行単位で行われていることから、FixedUpdate
は力を適用したり Rigidbody
の設定を変更する際に使用する事が推奨されています。
Update
はその他の大抵のフレーム更新作業で使用するようにします。
カメラなどに設定して「ステージ上の要素の Update
が終わった後に画面を描画したい場合」などには LateUpdate
を使用します。
void Update() {
...
}
void FixedUpdate() {
...
}
void LateUpdate() {
...
}
呼ばれる間隔
Update
は30fpsの場合0.03秒間隔で呼ばれます。
FixedUpdate
はデフォルトでは50fps換算の0.02秒毎に呼ばれます。
Edit > Project Settings > Time > TimeManager > FixedTimestep
で変更する事ができるようになっています。
要素を等速で回転させたい場合
Update
はCPUの処理能力に依存するため一定では無いので、
transform.Rotate(100);
とすると等間隔に回転するわけではなく、カクカクなってしまう。 時間経過に合わせて等間隔に回転させたい場合には
transform.Rotate(new Vector3(0, Time.deltaTime * 100, 0));
とする事で時間経過毎に同じ角度づつ回転させる事が可能になる。
Time.deltaTime
は前のフレームから経過した差分の秒数が入っています。