使用 Unity ConfigurableJoint 在零重力下出现意外的旋转行为

问题描述 投票:0回答:1

我有两个立方体通过 ConfigurableJoint 连接,漂浮在零重力中。 XYZ 运动被锁定,并且 XYZ 角度运动受到限制。在某些关节配置中,当我设置“目标旋转”时,立方体相互推动并开始旋转,似乎不知从何而来产生角动量。 关于这种旋转行为从何而来,有什么想法吗?有没有办法阻止它?

到目前为止,我解决此问题的最佳尝试是尝试检测关节何时处于可能引起旋转的状态,然后对关节电机应用弱化因子。然而,事实证明准确检测这一点很困难。

unity-game-engine game-physics
1个回答
0
投票

事实证明,当关节锚与关节连接锚分离时,就会发生旋转。

由于似乎没有好的方法来防止这种情况发生,我的解决方案是检测何时发生分离,然后对关节电机应用弱化因子。

private void FixedUpdate()
{
    Vector3 diff = transform.TransformPoint(joint.anchor) - joint.connectedBody.transform.TransformPoint(joint.connectedAnchor);

    jointDrive.maximumForce = Mathf.Lerp(jointDrive.maximumForce, maxForce * Mathf.Max(0, 1f - 1000f * diff.magnitude), Time.fixedDeltaTime);

    if (joint.angularXDrive.maximumForce != jointDrive.maximumForce)
        joint.angularXDrive = jointDrive;
    if (joint.angularYZDrive.maximumForce != jointDrive.maximumForce)
        joint.angularYZDrive = jointDrive;
}
© www.soinside.com 2019 - 2024. All rights reserved.