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

时间:2018-04-09 12:03:49

标签: unity3d vector coordinates direction

此“对象”是2D坐标中的矩形。 (游戏在Unity 3D中)

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

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

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

上下文

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

(我还没有在代码中写到这一点,但是“head”下方是船舶前进的标准化向量,而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可能位于任意一侧,具体取决于物体方向,因此它可以加速或减慢船只。

1 个答案:

答案 0 :(得分:2)

您可以使用任何方向矢量执行速度的点积,以使组件朝向该方向。例如。如果对象移动到它自己的右边,Vector2f.DotProduct(Rigidbody.velocity, Rigidbody.right)将是正面的,反之亦然。