问题
- 对一个复杂的 Rigidbody(刚体)添加扭矩(这种复杂结构的刚体与立方体或者重力沿着x,y或者z轴中心完美对称的刚体不同),使用了方法AddRelativeTorque,但是 Rigidbody(刚体)的旋转方向并不符合预期。
原因
AddRelativeTorque方法是按照Inertia Tensors(惯性张量)添加扭矩的。因此,需要的角速度必须先按照Inertia Tensors(惯性张量)的方向进行变换。
解决方案
如果需要对象按照特定的角速度进行旋转,并且沿世界坐标系的方向轴进行旋转,参考代码如下:
// 沿着Y轴旋转
Vector3 desiredAngularVelInY = new Vector3(0, Mathf.PI, 0); // 1/2 revs per second
Vector3 torque = rigidbodyCached.inertiaTensorRotation * Vector3.Scale(rigidbodyCached.inertiaTensor, desiredAngularVelInY);
rigidbody.AddRelativeTorque(torque, ForceMode.Impulse);
请注意,这个方案仅使用于单个RigidBodies(刚体),包括一个游戏对象包涵多个碰撞检测机,不包括多个刚体通过铰链连接在一起的情况。
更多信息
更多详细信息请参考:Answers post。
本文适用于Unity 5.x