unity3d以有限的角度前后旋转

unity3d以有限的角度前后旋转,unity3d,Unity3d,我想在一段时间内旋转一个物体在一个轴上的特定角度。 当它达到极限,比如说5度时,在相反的方向重复这个过程 我可以使用Quaternion.Euler向5度方向旋转,但如何检查它是否已达到5度并开始向-5度方向反转 因此,在更新中,我会: int dir = 1; // somewhere global Quaternion r = Quaternion.Euler(0, Timer.deltaTime * dir, 0); transform.rotation *= r; // I wan

我想在一段时间内旋转一个物体在一个轴上的特定角度。 当它达到极限,比如说5度时,在相反的方向重复这个过程

我可以使用Quaternion.Euler向5度方向旋转,但如何检查它是否已达到5度并开始向-5度方向反转

因此,在更新中,我会:

int dir = 1; // somewhere global

Quaternion r = Quaternion.Euler(0, Timer.deltaTime * dir, 0);

transform.rotation *= r;

// I want to: if the "angle is >= 5f", i want to do dir *= -1 to reverse it 

if (/* angle delta is >= 5f or <= -5f */)
{
    dir *= -1;
}

谢谢

如果您只想前后旋转,可以使用正弦波平滑地前后移动

public class rotator : MonoBehaviour {

public float _Angle;
public float _Period;

private float _Time;

// Update is called once per frame
void Update () {
    _Time = _Time + Time.deltaTime;
    float phase = Mathf.Sin(_Time / _Period);
    transform.localRotation = Quaternion.Euler( new Vector3(0, phase * _Angle, 0));
}
}

如果您只想前后旋转,可以使用正弦波平滑地前后移动

public class rotator : MonoBehaviour {

public float _Angle;
public float _Period;

private float _Time;

// Update is called once per frame
void Update () {
    _Time = _Time + Time.deltaTime;
    float phase = Mathf.Sin(_Time / _Period);
    transform.localRotation = Quaternion.Euler( new Vector3(0, phase * _Angle, 0));
}
}

这是一个很好的方法。尽管如此,我仍然对如何读取角度的增量感到好奇。你可以通过四元数得到两个四元数之间旋转的总增量。从旋转角度,这是将第一个旋转转换为第二个旋转所需的总旋转角度的度量,它不容易转换为度。我想你可以得到你的角度和参考角度之间的FromToRotation,将其转换为eulerAngles,然后检查-但是没有办法确定给定四元数产生哪种Euler组合,所以你不能指望一个轴是稳定的。这是一个很好的方法。尽管如此,我仍然对如何读取角度的增量感到好奇。你可以通过四元数得到两个四元数之间旋转的总增量。从旋转角度,这是将第一个旋转转换为第二个旋转所需的总旋转角度的度量,它不容易转换为度。我想你可以得到你的角度和参考角度之间的FromToRotation,将其转换为eulerAngles,然后检查-但是没有办法确定给定四元数产生哪种Euler组合,所以你不能指望一个轴是稳定的。