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);
        }
    }
}