補間を用いることで、ランタイムで発生する Rigidbody (リジッドボディ) ゲームオブジェクトの動きのジッターに対処することができます。
ジッターは、(Fixed Timestep で指定される) 物理シミュレーションの更新頻度がアプリケーションのフレームレートより低い (遅い) 場合に発生することがあります。これが最も顕著に現れるのは、物理ベースで動くリジッドボディをカメラがランタイムで追跡する場合です。
Unity の PhysX システムには、補間を実装する方法があります。リジッドボディの Interpolate 設定に、ランタイムでリジッドボディのモーションにジッターが見られる場合にその見た目を滑らかにする、2 つのオプションが提供されています。そのオプションとは Interpolate (内挿) と Extrapolate (外挿) です。
内挿と外挿はどちらも、物理演算の更新と更新の間にリジッドボディのポーズ (つまり位置と回転) を計算します。どちらのオプションを使用するかは、ユースケースによって、より良いビジュアルが実現できるほうを選択してください。
内挿や外挿は、リジッドボディの動きにジッターが見られる場合にのみ使用してください。Interpolate はデフォルトでは None に設定されています。
内挿または外挿を有効にすると、リジッドボディのトランスフォームが物理演算システムによって制御されます。このため、トランスフォームに直接 (物理ベースでない) 変更を加える場合は、その後に [[Physics.SyncTransforms]] の呼び出しを付随させる必要があります。これを行わなかった場合、Unity は、物理演算システムによらないトランスフォームの変更を全て無視します。
直前の 2 回の物理演算更新のリジッドボディのポーズを使用して、現在のフレームのリジッドボディのポーズを計算し、適用します。
Interpolate を使用すると、リジッドボディが少し遅れて動いている (本来あるべき位置より少し遅れた位置にある) ように見えます。これは、内挿の場合、リジッドボディのポーズが物理演算更新 1 回分遅延される (それによって計算に使用できるポイントが 2 つになり、リジッドボディを新しいポーズに動かすための十分な時間が確保される) ためです。
内挿は外挿よりも正確ですが、物理演算の更新 1 回分の遅れが生じます。
リジッドボディの速度が変化する場合や、他にリジッドボディの動きに影響を与える物理演算要素がある場合には、通常は Interpolate の使用が最も適しています。
Interpolate は、API プロパティ RigidbodyInterpolation.Interpolate
で表されます。
直前の物理演算更新のリジッドボディのポーズを使用して、次の物理演算更新のリジッドボディのポーズを予測することで、現在のフレームのリジッドボディのポーズを計算します。
Extrapolate を使用すると、リジッドボディが本来あるべき位置より少し先を動いているように見えます。これは、外挿では、リジッドボディの現在の速度を使用して次の物理演算更新のリジッドボディのポーズの予測が行われる (これにより計算に使用できるポイントが 2 つになる) ためです。
外挿を用いると正確性が低くなり、目に見えて衝突の境界を超える (そして次の物理演算更新後に次フレームで修正される) ことがあります。これは、外挿の計算が、未来の物理的な力や計算は考慮しないためです。
通常、外挿の使用が適しているのは、正確性が重要でない場合のみです。例えば、リジッドボディが一定の速度で動き、他にリジッドボディの動きに影響を与える物理演算要素がない場合です。
Extrapolate は、API プロパティ RigidbodyInterpolation.Extrapolate
によって表されます。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.