【发布时间】:2022-08-11 23:33:47
【问题描述】:
我有一个协程,我正在努力将颜色从白色变为红色。它有效,但它只发生一次,因为协程只运行一次。
我希望这种情况像乒乓球一样发生两到三次,而不需要多次运行协程(因为那是不可行的)。
它应该从白色变为红色,然后红色变为白色,最后再由白色变为红色。有没有办法在下面显示的协程中做到这一点?
bool changingColor = false;
void Start(){
StartCoroutine(LerpColor(this.GetComponent<MeshRenderer>(), Color.white, Color.red, 0.5f));
}
IEnumerator LerpColor (MeshRenderer mesh, Color fromColor, Color toColor, float duration) {
if (changingColor) {
yield break;
}
changingColor = true;
float counter = 0;
while (counter < duration) {
counter += Time.deltaTime;
float colorTime = counter / duration;
Debug.Log (colorTime);
//Change color
mesh.material.color = Color.Lerp (fromColor, toColor, counter / duration);
//Wait for a frame
yield return null;
}
changingColor = false;
}
-
您是否考虑过使用循环?
-
我在代码中使用了一个while循环
-
嗯,是的。但是你说你想多次这样做。什么事情多次发生?一个循环!
-
ofc,但正如你所见,我不希望它以相同的模式重复。我希望它从白色变为红色,从红色变为白色,然后再从白色变为红色。
-
那么为什么不在转发器循环的每次迭代结束时交换
fromColor和toColor呢?