unity3d以有限的角度前后旋转
我想在一段时间内旋转一个物体在一个轴上的特定角度。 当它达到极限,比如说5度时,在相反的方向重复这个过程 我可以使用Quaternion.Euler向5度方向旋转,但如何检查它是否已达到5度并开始向-5度方向反转 因此,在更新中,我会: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
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组合,所以你不能指望一个轴是稳定的。