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

Unity3d 与子弹物理学的统一:刚体位置精度,unity3d,bulletphysics,bullet,Unity3d,Bulletphysics,Bullet,我用加力或设定速度将刚体提升到Y轴上的一个位置(目标)。然后刚体将停止并保持在目标位置上 我想检查刚体位置何时等于或尽可能接近目标 我试过使用默认的物理引擎PhysicsX。 使用以下信息可以正常工作 void FixedUpdate() { if(Rigidbody.position.y >= 0.6) { //Stop Rigidbody } } 目标为0.6,刚体在Y轴上的停止点为0.6045592。 每次运行后,刚体停止在0.6045592

我用加力或设定速度将刚体提升到Y轴上的一个位置(目标)。然后刚体将停止并保持在目标位置上

我想检查刚体位置何时等于或尽可能接近目标

我试过使用默认的物理引擎PhysicsX。 使用以下信息可以正常工作

void FixedUpdate()
{
    if(Rigidbody.position.y >= 0.6)
    {
        //Stop Rigidbody
    }
}
目标为0.6,刚体在Y轴上的停止点为0.6045592。 每次运行后,刚体停止在0.6045592。 这就是我想要的,每次都停在相同的位置,误差很小

出于某些原因,我从PhysicsX切换到Bullet Physics with

与Unity的刚体不同,刚体不包含位置变量。所以我必须访问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物理示例? 我希望减少错误值,并在每次运行时将刚体停止在同一位置

我想,我访问BRigidbody.transform.position是错误的。应该是别的。 或者我不应该在FixedUpdate()中检查条件,而是在其他地方

这里只是一个截图

谢谢


--我已尝试将fixedTimeStep更改为较低的值,但没有多大帮助,而且会造成更大的滞后。

您可以在
中将位置设置为
0.6
,如果
。因此,如果你的刚体将目标从一帧/固定更新“超调”到另一帧/固定更新,它只是被设置为固定到你想要的位置。无论如何,如果你总是想让这件事移动到一个特定的位置,你真的应该仔细研究一下,而不是通过物理/计算!我总是想把这个绿色的盘子抬起来,因为我会在上面放一些小东西。所以如果我把绿板举起来,小物体会随着绿板的速度和角速度向上移动@德胡戈