我通过AddForce或设定速度将刚体提升到Y轴上的位置(目标)。然后,刚体会停下来并保持在目标位置。
我想检查刚体位置何时与目标相等或尽可能接近。
我尝试过使用PhysicsX,默认的物理引擎。 它可以正常使用以下信息。
void FixedUpdate()
{
if(Rigidbody.position.y >= 0.6)
{
//Stop Rigidbody
}
}
目标是0.6,刚体在Y轴上停在0.6045592。 并且每次运行后刚性体停在0.6045592。 这就是我想要的,每次都停在同一个位置并且误差很小。
出于某些原因,我使用this asset从PhysicsX切换到Bullet Physics。
与Unity的Rigidbody不同,BRigidBody不包含位置变量。所以我必须改为访问transform.position。
void FixedUpdate()
{
if(BulletRigidbody.transform.position.y >= 0.6)
{
//Stop Bullet Rigidbody
}
}
使用Bullet,当目标值为0.6时,刚体停在0.6720,0.72,0.8。
错误值非常大,每次运行时都不是相同的值。
两个例子都使用fixedTimeStep = 0.02并使用相同的提升速度。
如何修复Bullet Physics示例? 我希望减少误差值,并在每次运行时将刚体停在同一位置。
我想,我错了访问BRigidbody.transform.position。它应该是别的东西。 或者我不应该检查FixedUpdate()中的条件,但是在其他地方。
这是一个截图。
感谢。
- 我已经尝试将fixedTimeStep更改为更低的值,但它并没有多大帮助,也没有更多的延迟。