我有一个想要在其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);
}
答案 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);
}