Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Unity3D中缓慢旋转对象数次_C#_Unity3d - Fatal编程技术网

C# 在Unity3D中缓慢旋转对象数次

C# 在Unity3D中缓慢旋转对象数次,c#,unity3d,C#,Unity3d,我有一个对象,我想在它的Y轴上平滑旋转几次,RotateCount(对象在自身上旋转的次数)是一个变量,所以我可以将它更改为我想要的数字。我写了下面的代码,但对象只旋转一次?请问我该怎么修 public IEnumerator RotateObject() { yield return new WaitForSeconds(0.9f); RotateCount = 5; float Yrot = 360f; float t = 0; float targe

我有一个对象,我想在它的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);
}
public IEnumerator RotateObject()
{
收益率返回新WaitForSeconds(0.9f);
旋转计数=5;
浮动Yrot=360f;
浮动t=0;
浮动目标t=0;
Vector3欧拉=object.transform.rotation.eulerAngles;
while(targetRot
它只旋转一次,因为您的
Yrot
变量设置为
360f
,这会导致协同程序在旋转一圈后停止。与其在
while
循环中设置
targetRot
变量的行中相乘,不如将其用作退出条件,或者在
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);
}
public IEnumerator RotateObject()
{
收益率返回新WaitForSeconds(0.9f);
旋转计数=5;
浮动Yrot=360f*旋转计数;
浮动t=0;
浮动目标t=0;
Vector3欧拉=object.transform.rotation.eulerAngles;
while(targetRot
是的,它现在可以工作,但它总是在同一时间旋转,我的意思是,如果是1,它在1秒内旋转1次,如果是5,它在1秒内旋转5次!如何更改时间,使其在5秒内旋转5次,在8秒内旋转8次等等?您可以通过删除使用
Mathf.Lerp
调用的
RotateCount
乘法来执行此操作。这将使它每次旋转运行一秒钟。感谢您的帮助!:)呃,重复,一直到它回到0>次