Unity 对象在应用 AddForceAtPosition 时移动,而它应该只旋转

Unity Object moves when AddForceAtPosition is applied when it should only rotate

我有一个统一的游戏对象,我想用一些力来推动矢量。目前我正在尝试添加一些真实的旋转力,因此使用 AddForceAtPosition 使用刚体质心的偏移量。然而,当我 运行 游戏时,除了旋转之外,物体开始轻微移动。没有其他力存在,也没有阻力。

rb.AddForceAtPosition(transform.TransformDirection(Vector3.up * 5), transform.position + transform.TransformDirection(mainThrustPt)); 

如果你推动用绳子系着的球的边缘,你会期望它既能摆动又能旋转。在施加力之前尝试使用它:

rigidbody.constraints = RigidbodyConstraints.FreezeRotationX | RigidbodyConstraints.FreezeRotationY | RigidbodyConstraints.FreezeRotationZ;

Rigidbody.AddForceAtPosition 函数对对象同时应用 torqueforce。这意味着对象将同时旋转和移动。

如果您只想施加一个不移动对象的旋转力,请使用 Rigidbody.AddTorqueRigidbody.AddRelativeTorque,它们只会对对象施加一个旋转力。

如果您不想移动刚体 x,y,z 位置,您也可以释放它,但这样做时对象的移动行为有时会很奇怪。

Yet when i run the game, the object starts moving slightly in addition to the rotation.

如果对象在没有施加力或没有使用 AddForceAtPosition 的情况下移动,则重力正在拉动它。像我在上图中所做的那样禁用 "Use Gravity"。

如果需要旋转,请使用 AddTorque。