如何计算旋转速度统一3d c#

时间:2016-11-23 23:39:56

标签: c# unity3d rotation

所以问题是:我有一个让刚体旋转的传感器,问题是我无法计算它旋转的速度(如果传感器快速移动,物体也会快速移动但是当它移动时与另一个游戏对象发生碰撞时,它将不会应用已旋转的速度/力量 有什么方法可以计算它最近旋转的速度/力量,以便我可以在碰撞时将速度/力施加到另一个物体上吗?

注意:我不完全确定我需要的是速度还是力量

float rot = float.Parse (sp.ReadLine());
transform.eulerAngles = new Vector3 (0, 90, rot); 

注意:由于对象的设计方式,默认情况下必须旋转90度。基本上我正在做的是从陀螺仪接收信息并将其置于物体旋转中。

传感器以Float的形式给出-90到90的值,当它向左旋转时,它给出从-90到0的值,当向右旋转时,它给出从0到90的值。这个值应该是用于以图形方式旋转对象,并且当它与另一个游戏对象发生碰撞时它也会旋转它的速度(如果它从-90快速移动到-20,例如它应该施加的力比从它缓慢移动时施加的力 - 90至-50至-20)

1 个答案:

答案 0 :(得分:0)

当试图在对象之间进行可信的物理交互时,您永远不想直接操纵transform。相反,您应该使用各种可用的方法来物理影响附加的Rigidbody

要在这种情况下应用轮播,您将要使用Rigidbody.AddTorque()。以下是您如何使用它的想法:

// Probably get this value in Start() and save it for later
Rigidbody rb = GetComponent<Rigidbody>();

float rot = float.Parse (sp.ReadLine());

// transform.forward is the unit vector corresponding to the local z-axis of the object
Vector3 rotationAxis = transform.forward * rot;
rb.AddTorque(rotationAxis);

希望这有帮助!如果您有任何问题,请告诉我。