unity3d 如何旋转30度,每我点击鼠标左键?

ac1kyiln  于 2022-11-25  发布在  其他
关注(0)|答案(3)|浏览(254)

我是Unity的新手。我想绕z轴旋转一个简单的平面。问题是当平面旋转超过360度时,它就不再旋转了。
这是我的代码:

private float a;
private bool clicked = true;

void Update() {
    if(clicked)
    {
        if(Input.GetMouseButtonDown(0))
        {
            StartCoroutine(rotasi ());
        }
    }
}
IEnumerator rotasi()
{   
    var a = transform.eulerAngles.z+30;     
    while(true)
    {
        if(transform.eulerAngles.z < a)
        {
            transform.rotation = Quaternion.Lerp(transform.rotation,Quaternion.Euler(new Vector3(0,0,a)),Time.deltaTime*30f);
            clicked = false;

            yield return null;
        }

        StartCoroutine(wait());
        yield return 0;
    }   
}
IEnumerator wait()
{
    yield return new WaitForSeconds(.2f);
    clicked = true;
}
ckocjqey

ckocjqey1#

当你达到360度或以上时,回到0度。
0度实际上与360度相同,但Unity可能不支持360度或以上。

tkclm6bt

tkclm6bt2#

检查你是否超过了360度。如果是,就从你的最终结果中减去360度。

if (transform.eulerAngles.z + 30 >= 360)
    var a = transform.eulerAngles.z + 30 - 360
else
    var a = transform.eulerAngles.z + 30

这段代码可以更小,性能更好,但我想你已经明白了。

mmvthczy

mmvthczy3#

对于任何人有同样的问题,我是与连续旋转,我能够连续旋转五边形(因此72度)与此:

void Update()
    {
        if (Rotating)
        {
            transform.rotation = Quaternion.Slerp(transform.rotation, Target, .075f);
            if (transform.rotation == Target)
            {
                Rotating = false;
                transform.rotation = Target;
            }
        }
    }

    public void Rotate()
    {
        if (Rotating)
        {
            return;
        }
        Target = transform.rotation * Quaternion.Euler(72, 0, 0);
        Rotating = true;
    }

相关问题