Version: 2023.1
言語: 日本語
リジッドボディへの一定力の適用
Rigidbody コンポーネントのリファレンス

リジッドボディへの補間の適用

補間を用いることで、ランタイムで発生する Rigidbody (リジッドボディ) ゲームオブジェクトの動きのジッターに対処することができます。

ジッターは、(Fixed Timestep で指定される) 物理シミュレーションの更新頻度がアプリケーションのフレームレートより低い (遅い) 場合に発生することがあります。これが最も顕著に現れるのは、物理ベースで動くリジッドボディをカメラがランタイムで追跡する場合です。

Unity の PhysX システムには、補間を実装する方法があります。リジッドボディの Interpolate 設定に、ランタイムでリジッドボディのモーションにジッターが見られる場合にその見た目を滑らかにする、2 つのオプションが提供されています。そのオプションとは Interpolate (内挿) と Extrapolate (外挿) です。

内挿と外挿はどちらも、物理演算の更新と更新の間にリジッドボディのポーズ (つまり位置と回転) を計算します。どちらのオプションを使用するかは、ユースケースによって、より良いビジュアルが実現できるほうを選択してください。

内挿や外挿は、リジッドボディの動きにジッターが見られる場合にのみ使用してください。Interpolate はデフォルトでは None に設定されています。

内挿または外挿を有効にすると、リジッドボディのトランスフォームが物理演算システムによって制御されます。このため、トランスフォームに直接 (物理ベースでない) 変更を加える場合は、その後に [[Physics.SyncTransforms]] の呼び出しを付随させる必要があります。これを行わなかった場合、Unity は、物理演算システムによらないトランスフォームの変更を全て無視します。

Interpolate

直前の 2 回の物理演算更新のリジッドボディのポーズを使用して、現在のフレームのリジッドボディのポーズを計算し、適用します。

Interpolate を使用すると、リジッドボディが少し遅れて動いている (本来あるべき位置より少し遅れた位置にある) ように見えます。これは、内挿の場合、リジッドボディのポーズが物理演算更新 1 回分遅延される (それによって計算に使用できるポイントが 2 つになり、リジッドボディを新しいポーズに動かすための十分な時間が確保される) ためです。

内挿は外挿よりも正確ですが、物理演算の更新 1 回分の遅れが生じます。

リジッドボディの速度が変化する場合や、他にリジッドボディの動きに影響を与える物理演算要素がある場合には、通常は Interpolate の使用が最も適しています。

Interpolate は、API プロパティ RigidbodyInterpolation.Interpolate で表されます。

Extrapolate

直前の物理演算更新のリジッドボディのポーズを使用して、次の物理演算更新のリジッドボディのポーズを予測することで、現在のフレームのリジッドボディのポーズを計算します。

Extrapolate を使用すると、リジッドボディが本来あるべき位置より少し先を動いているように見えます。これは、外挿では、リジッドボディの現在の速度を使用して次の物理演算更新のリジッドボディのポーズの予測が行われる (これにより計算に使用できるポイントが 2 つになる) ためです。

外挿を用いると正確性が低くなり、目に見えて衝突の境界を超える (そして次の物理演算更新後に次フレームで修正される) ことがあります。これは、外挿の計算が、未来の物理的な力や計算は考慮しないためです。

通常、外挿の使用が適しているのは、正確性が重要でない場合のみです。例えば、リジッドボディが一定の速度で動き、他にリジッドボディの動きに影響を与える物理演算要素がない場合です。

Extrapolate は、API プロパティ RigidbodyInterpolation.Extrapolate によって表されます。

リジッドボディへの一定力の適用
Rigidbody コンポーネントのリファレンス