メインのフレーム更新とは異なり、Unity の物理演算システムは、固定時間間隔で更新されます。これは、物理演算シミュレーションの正確さと一貫性を確保するために重要です。固定更新の間隔は、多くの場合に固定時間ステップと呼ばれます。固定時間ステップは、次の 2 つの方法で読み取りまたは変更できます。
Time.fixedDeltaTime プロパティの値を設定します。どちらの場合も、固定時間ステップは秒単位で指定します。例えば、値 0.01 は、各固定時間ステップの継続時間が 100 分の 1 秒であるため、1 秒あたり 100 回の固定更新が行われることを表します。
固定更新ループは、固定された時間間隔で実行されるコードをシミュレートしますが、実際には、固定更新の間隔は一定ではありません。これは、固定更新は常にフレームを実行する必要があり、フレームの継続時間と固定時間ステップの長さが完全に同期していないためです。固定時間ステップが現在のフレーム中に完了すると、関連する固定更新は次のフレームまで実行できません。フレームレートが低いと、1 つのフレームが複数の固定時間ステップにわたる場合があります。この場合、固定更新のバックログは現在のフレーム中に蓄積され、Unity は追いつくために次のフレームでそれらすべてを実行します。
注意超過した場合に Unity がシミュレーションに追いつこうとしなくなる最大時間ステップ期間があります。詳細については、時間変動の処理を参照してください。
Unity には、修正更新のたびに独自のコードを実行するためのエントリーポイントとして MonoBehaviour.FixedUpdate メソッドが用意されています。これは、リジッドボディへの力の適用など、独自の物理演算関連コードを実行する場合に最も頻繁に使用されます。
固定更新サイクル中に発生する動作の詳細は、実行順序図の物理演算セクションで確認できます。
1 秒あたりの固定時間ステップ数よりも高いフレームレートでアプリケーションを実行すると、平均フレーム継続時間は 1 つの固定時間ステップの継続時間よりも短くなります。この場合は、各フレームで 1 回固定更新が行われるか、更新がまったく行われません。例えば、固定時間ステップ値が 0.02 の場合、1 秒間に 50 回の固定更新が行われます。アプリケーションを 80 フレーム/秒で実行すると、以下に示すように、固定更新が 2 または 3 フレームごとに行われます。
この図は、固定更新時間ステップレートよりも高速に実行されているフレームレートを示しています。時間が右に進み、各フレームに番号が付けられ、フレームの開始時にその Update 呼び出しがオレンジ色で表示されます。ここでの固定時間ステップは 0.02 秒 (1 秒あたり 50 回) であり、ゲームはより高速の 1 秒あたり約 80 フレームで実行されています。この状況では、フレームの開始時までに完全な固定更新時間ステップが完了したかどうかによって、1 つの固定更新呼び出しが設定されているフレームと、まったく設定されていないフレームがあります。固定時間ステップの期間は A、B、C、D、E の文字でマークされ、対応する固定更新呼び出しが発生するフレームは緑色でマークされます。時間ステップ A の固定更新呼び出しはフレーム 4 の開始時点で発生し、時間ステップ B の固定更新呼び出しはフレーム 7 の開始時点で発生するというように続きます。
アプリケーションが固定時間ステップ値よりも低いフレームレートで実行されている場合、平均フレーム継続時間は 1 つの固定時間ステップよりも長くなります。つまり、固定更新のバックログが一部のフレーム中に蓄積されることがあります。そのため、各フレームに 1 つ以上の固定更新があり、物理演算シミュレーションがバックログに追いつくことができます。例えば、固定時間ステップ値が 0.01 の場合、1 秒間に 100 回の固定更新が行われます。アプリケーションが毎秒 40 フレームで実行されている場合、Unity はフレームごとに平均 2 - 3 回の固定更新を実行して対応します。このようなシナリオは、モデルに高いフレームレートを設定するよりも正確な物理演算を適用することの方が重要な場合に適しています。
この図は、固定更新サイクルがフレームレートよりも速く実行されている場合にどうなるかを示しています。ここでの固定時間ステップは 0.01 秒 (1 秒あたり 100 回) であり、ゲームフレームレートはより低速の 1秒あたり約 40 フレームで実行されています。この状況では、各更新呼び出しの前に、ほとんどのフレームに複数の固定更新呼び出しが設定されています。この数は、前のフレームから経過した全体の更新タイムステップの数によって異なります。固定更新時間ステップの期間は A、B、C などの文字でマークされ、対応する固定更新呼び出しが発生するフレームは緑色でマークされます。時間ステップ A と B の固定更新呼び出しはフレーム 2 の開始時点で発生し、フレーム C、D、E の固定更新呼び出しはフレーム 3 の開始時点で発生するというように続きます。
注意時間ステップ値が低いほど、物理演算更新の頻度とシミュレーションの精度が高くなり、CPU の負荷も高くなります。