对象相对于自身的方向 - 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.right
或 transform.left
可以在任何一侧,这取决于物体的方向,所以它可以使船加速或减速。
您可以计算速度与任何方向向量的点积,得到该方向的分量。例如。如果对象向其自身移动,Vector2f.DotProduct(Rigidbody.velocity, Rigidbody.right)
将为正,反之亦然。
这个'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.right
或 transform.left
可以在任何一侧,这取决于物体的方向,所以它可以使船加速或减速。
您可以计算速度与任何方向向量的点积,得到该方向的分量。例如。如果对象向其自身移动,Vector2f.DotProduct(Rigidbody.velocity, Rigidbody.right)
将为正,反之亦然。