插值提供了一种在运行时管理刚体游戏对象移动中抖动外观的方法。
当物理模拟更新的速率(由 Fixed Timestep 确定)低于应用程序的帧率时,可能会出现抖动。这在当刚体具有摄像机在运行时跟踪的基于物理运动的情况下最为明显。
Unity 的 PhysX 系统提供了一种实现插值的方法。刚体上的 Interpolate 设置提供了两个选项,使刚体的运动外观平滑化(如果其在运行时出现抖动)。选项包括插值 (Interpolate) 和外推 (Extrapolate)。
插值和外推都会在物理更新之间计算刚体的姿势(即位置和旋转)。应该选择哪个选项取决于哪个选项能够为您的用例带来最佳视觉效果。
仅当看到刚体运动中的抖动时才应使用插值或外推。默认情况下,Interpolate 设置为 None。
启用插值或外推后,物理系统将控制刚体的变换。因此,应使用 Physics.SyncTransforms 调用来跟踪对变换的任何直接(非物理)更改。否则,Unity 会忽略并非源自物理系统的任何变换更改。
使用前两次物理更新中刚体的姿势,计算和应用刚体在当前帧中的姿势。
插值使得刚体看起来略微落后于其应在的位置。这是因为插值将刚体的姿势延迟一次物理更新,使其有两个点用于计算,并有足够的时间将刚体移动到新姿势。
插值比外推更准确,但有一次物理更新的时滞。
插值通常最适合刚体速度发生变化的情况,或者如果还有其他物理元素影响刚体的运动。
插值由 API 属性 RigidbodyInterpolation.Interpolate 表示。
使用上一次物理更新中刚体的姿势,并在下一次物理更新中预测刚体的姿势,以计算和预测当前帧中的姿势。
外推使得刚体看起来比其应在的位置略微靠前一些。这是因为外推使用刚体的当前速度来预测刚体在下一次物理更新中的姿势,因此它有两个点可用于计算。
外推通常不太准确,可能会明显超出碰撞边界(然后在下一帧,即下一次物理更新后进行自我校正)。这是因为外推计算不考虑未来的物理力或计算。
外推通常适合精度不重要的情况;例如,如果刚体以恒定速度移动,并且没有其他物理元素影响刚体的移动。
外推由 API 属性 RigidbodyInterpolation.Extrapolate 表示。