与子弹物理学的统一:刚体位置精度

时间:2018-04-16 12:02:54

标签: unity3d bulletphysics bullet

我通过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()中的条件,但是在其他地方。

这是一个截图。

enter image description here

感谢。

- 我已经尝试将fixedTimeStep更改为更低的值,但它并没有多大帮助,也没有更多的延迟。

0 个答案:

没有答案