【问题标题】:How can I calculate the speed of a rotation unity 3d c#如何计算旋转统一 3d c# 的速度
【发布时间】:2016-11-23 23:39:56
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 如果您想要精确的物理交互,您不应该直接设置旋转 - 您应该考虑使用物理系统并向对象施加扭矩,其大小取决于传感器移动的速度/速度.
  • 我不完全确定我是否理解你,你能给我一个你所说的代码示例吗?
  • 我需要您展示您当前的方法,以便我和其他成员更好地了解您从传感器获取的数据以及您如何使用它。请编辑您的问题以包含相关代码,我们将看看它是否可以根据您的需要进行调整。
  • 那里是我编辑的,如果您需要更多信息,请告诉我,谢谢您的帮助:)
  • 好的 - 如果我提供的答案有任何不清楚之处,请告诉我,在这种情况下它是否充分满足您的需求。

标签: c# unity3d rotation


【解决方案1】:

当试图在对象之间引起可信的物理交互时,你永远不想直接操纵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);

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

【讨论】:

  • 我可以看到您的方法可能非常有用,因为它正在解决我遇到的另一个问题。但仍然存在一个问题:传感器不断向统一发送值,因此如果我使用此代码,游戏对象将不断移动并增加力量,这不是我需要的。另一个问题是传感器也发送负值(它发送的值从 -90 到 90),所以我不确定扭矩如何在负值下工作。
  • 此外,游戏对象应该能够前后旋转,计算两个方向的速度。 (游戏对象可以从两侧与另一个对象碰撞)所以我必须在两侧施加力,我不完全确定它是如何工作的
  • @KevinDaich 这个传感器的本质是什么?从中可以期待什么样的数据?我认为可能需要对您的问题进行一些编辑,因此更容易确定如何将来自它的数据处理成可用的形式。
  • 我编辑了它,如果您需要更多信息,请告诉我
  • 有没有一种方法可以让我同时使用这两种方法,就像我已经在工作并将其与扭矩混合的方式? (使用我的旧方法在视觉上旋转物体并使用扭矩施加力但不移动物体)可能会解决问题,但我不确定是否可以完成
猜你喜欢
  • 1970-01-01
  • 2016-07-21
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-13
  • 1970-01-01
相关资源
最近更新 更多