对象相对于自身的方向 - Unity C#

Object direction relative to itself - Unity C#

这个'object'是一个二维坐标的矩形。 (游戏在 Unity 3D 中)

使用Rigidbody.velocity.z我可以知道物体是向右还是向左移动,但是我怎么知道这个物体(宇宙飞船)是向右还是向左移动?

想象一艘加速前进的宇宙飞船。过了一会儿,船旋转了 90°,现在它的右侧与运动方向对齐。如果然后船旋转180°,它的左侧将与它移动的方向对齐。

我认为另一种提问方式是,如何知道船的哪一侧是运动矢量?

上下文

船有最大速度。如果船处于最大速度并且需要改变方向,则首先必须减速。如果船舶运动的矢量在其右侧某处,则必须添加一个推力,rigidbody.addForce (transform.left * force)

(我还没写在代码里,但是下面"headed"是船的航向的归一化向量,shipDirection是船的方向的归一化向量。据说当它们匹配时是船指向它要去的地方,但我必须先测试它)

if (throttle > 0) {
  if (headed != shipDirection) {
    if (body.velocity.z > 0)
      Rigidbody.addForce (transform.right * force);
    if (body.velocity.z < 0)
      Rigidbody.addForce (transform.left * force);
  }
}

上面的问题是 transform.righttransform.left 可以在任何一侧,这取决于物体的方向,所以它可以使船加速或减速。

您可以计算速度与任何方向向量的点积,得到该方向的分量。例如。如果对象向其自身移动,Vector2f.DotProduct(Rigidbody.velocity, Rigidbody.right) 将为正,反之亦然。