通过Vector 3 var旋转对象

时间:2014-10-22 15:26:22

标签: unity3d monodevelop unityscript

这是我的代码:

#pragma strict

public var spinAxis : Vector3 = Vector3(0,45,90);

function Start () {

}

function Update () {
    // Slowly rotate the object around its X axis at 1 degree/second.
    transform.Rotate(spinAxis * Time.deltaTime);
}

我只是希望立方体在两个轴(在这种情况下,y和z)上旋转,但它会在所有三个轴上旋转。我知道我在这里犯了一些愚蠢的错误。我可以通过说

成功地做到这一点
transform.Rotate(new Vector3(0,0,100) * Time.deltaTime);
例如,

。但是我希望检查员可以使用这些轴。

1 个答案:

答案 0 :(得分:1)

这将做你想要的:

#pragma strict

public var spinSpeed : Vector3 = Vector3(0,45,90); // Degrees per second per axis
private var rotation = Vector3.zero;

function Update ()
{
    rotation += spinSpeed * Time.deltaTime;
    transform.rotation.eulerAngles = rotation;
}

您的代码产生意外结果的原因是因为我认为您误读了Transform.Rotate函数的作用。它不会像spinAxis变量名所暗示的那样给你一个轴和旋转量。这是通过Transform.RotateAround实现的。

如果使用Transform.Rotate,则按顺序应用旋转。但在这个过程中,轴混合起来。例如,如果您首先在Y轴上旋转90度,则X轴和Z轴已切换到位。在任意两个轴上顺序旋转,第三个轴将始终如此参与。使用上面的代码,您可以在每次更新时重置或重新创建整个旋转,这样您就可以将未受影响的轴保持为0。