这是我的代码:
#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);
例如,。但是我希望检查员可以使用这些轴。
答案 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。