C# 在Unity3D中缓慢旋转对象数次
我有一个对象,我想在它的Y轴上平滑旋转几次,RotateCount(对象在自身上旋转的次数)是一个变量,所以我可以将它更改为我想要的数字。我写了下面的代码,但对象只旋转一次?请问我该怎么修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
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>次