缓慢旋转对象几次Unity3D

时间:2020-03-04 22:46:37

标签: c# unity3d

我有一个想要在其Y轴上平滑旋转几次的对象,RotateCount(对象在其自身上旋转的次数)是一个变量,因此我可以将其更改为所需的数字。我在下面编写了以下代码,但是对象仅旋转一次?我该如何解决?

public IEnumerator RotateObject()
{
    yield return new WaitForSeconds(0.9f);
    RotateCount = 5;
    float Yrot = 360f;
    float t = 0;
    float targetRot = 0;
    Vector3 eulers = object.transform.rotation.eulerAngles;
    while (targetRot < Yrot)
    {
        t += Time.deltaTime;
        targetRot = Mathf.Lerp(targetRot, Yrot * RotateCount, t * (0.3f * RotateCount));
        object.transform.rotation = Quaternion.Euler(eulers.x, targetRot, eulers.z);
        yield return null;
    }
    object.transform.rotation = Quaternion.Euler(eulers.x, Yrot, eulers.z);
}

1 个答案:

答案 0 :(得分:1)

它仅旋转一次,因为您的Yrot变量设置为360f,这会导致协程一圈后停止。与其在targetRot循环中设置while变量的行中相乘,不如将其用作退出条件,或者在while循环头中相乘使用Yrot或执行上述操作,因此您只需要执行一次,就像这样:

public IEnumerator RotateObject()
{
    yield return new WaitForSeconds(0.9f);
    RotateCount = 5;
    float Yrot = 360f * RotateCount;
    float t = 0;
    float targetRot = 0;
    Vector3 eulers = object.transform.rotation.eulerAngles;
    while (targetRot < Yrot)
    {
        t += Time.deltaTime;
        targetRot = Mathf.Lerp(targetRot, Yrot, t * (0.3f * RotateCount));
        object.transform.rotation = Quaternion.Euler(eulers.x, targetRot, eulers.z);
        yield return null;
    }
    object.transform.rotation = Quaternion.Euler(eulers.x, Yrot, eulers.z);
}