C# 如何将四元数.rotateTowwards()限制为仅顺时针旋转
我制作了一个速度表脚本,用于旋转速度表中的指针C# 如何将四元数.rotateTowwards()限制为仅顺时针旋转,c#,unity3d,C#,Unity3d,我制作了一个速度表脚本,用于旋转速度表中的指针 我面临的问题是,指针有时会向Quanternion.identity旋转360度。我可以使用if条件来检查值是否超过180,减去两倍的差值,但该条件会在每次Update()调用中检查这一点,并且只会使用1-time-use-only-if条件来混乱代码。是否有限制顺时针/逆时针方向旋转的功能?或者,您可以执行类似于存储最后一个zRot值的操作,并随着时间的推移将其减小并继续 private float zRot; void Update() {
我面临的问题是,指针有时会向
Quanternion.identity
旋转360度。我可以使用if条件来检查值是否超过180,减去两倍的差值,但该条件会在每次Update()
调用中检查这一点,并且只会使用1-time-use-only-if条件来混乱代码。是否有限制顺时针/逆时针方向旋转的功能?或者,您可以执行类似于存储最后一个zRot
值的操作,并随着时间的推移将其减小并继续
private float zRot;
void Update()
{
if (vehicle.IsOnGround())
{
zRot = ((vehicle.speed * 2.237f) / vehicle.maxSpeed) * 180;
transform.rotation = Quaternion.Euler(0, 0, -zRot);
}
else
{
if(zRot > 0)
{
zRot -= zeroRate * Time.deltaTime;
// clamp to 0
zRot = Mathf.Max(0, zRot);
transform.rotation = Quaternion.Euler(0, 0, -zRot);
}
}
}
只是现在
zeroRate
将以°/second
而不是您的版本中的radians/second
。因此,我没有看到您的解决方案代码,但我认为您不会有性能问题,而且解决方案似乎没有问题。在Unity Editor中,角度映射在180和-180之间,即使您输入的角度高于180。我还认为,如果这项工作正常,你的解决方案是可行的。@KBaker嗯,这听起来正是问题所在。。如果该值因任何原因超过180,则突然等于-180,因此旋转方向
似乎采用了最短的旋转方式,而现在正好相反
private float zRot;
void Update()
{
if (vehicle.IsOnGround())
{
zRot = ((vehicle.speed * 2.237f) / vehicle.maxSpeed) * 180;
transform.rotation = Quaternion.Euler(0, 0, -zRot);
}
else
{
if(zRot > 0)
{
zRot -= zeroRate * Time.deltaTime;
// clamp to 0
zRot = Mathf.Max(0, zRot);
transform.rotation = Quaternion.Euler(0, 0, -zRot);
}
}
}