关注

给一个 Rigidbody(刚体)增加扭矩,但是没有根据它的坐标系起作用

问题

  • 对一个复杂的 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

 

这篇文章有帮助吗?
0 人中有 0 人觉得有帮助
还有其它问题?提交请求

0 评论

登录写评论。