旋转宇宙飞船面对给定的方向向量

时间:2016-11-22 17:31:18

标签: c# unity3d

我在行星周围产生了一些宇宙飞船。我想让他们在这个星球上飞翔。

我也希望将它们旋转到它们飞入的方向。因为目前,预制件只是初始旋转。

我不知道,browserify是否适合解决此问题。 transform.RotateAround();无效。

所以我的问题是,我怎样才能让宇宙飞船绕行星飞行并旋转到它们飞行的方向?

到目前为止,这是我的代码:

Transform.Rotate()

1 个答案:

答案 0 :(得分:1)

移动航天器

目前,您似乎无法向Transform.RotateAround()提供正确的参数。具体来说,第二个参数应该是执行旋转的轴,在这种情况下应该是垂直于所需flyDirection的矢量和船舶/行星之间的矢量,而不是flyDirection本身。我们可以使用Vector3.Cross()

轻松完成此操作
void Update()
{
    // Calculating vector perpendicular to flyDirection and vector between ship/planet
    Vector3 rotationAxis = Vector3.Cross(flyDirection, transform.position - planet.position);
    transform.RotateAround(planet.position, rotationAxis, speed * Time.deltaTime);

    // ...
}

旋转航天器

将对象的旋转设置为面向任意方向的快捷方式是将值分配给其transform.forward属性。在您的情况下,您只需提供flyDirection作为要使用的新forward向量:

void Update()
{
    // Calculating vector perpendicular to flyDirection and vector between ship/planet
    Vector3 rotationAxis = Vector3.Cross(flyDirection, transform.position - planet.position);
    transform.RotateAround(planet.position, rotationAxis, speed * Time.deltaTime);

    // Setting spacecraft to face flyDirection
    transform.forward = flyDirection;
}

如果您需要特定的四元数值,或者需要航天器transform.up始终指向特定方向(例如,法线指向行星表面),请考虑使用{ {3}}设置轮换。

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