我创建了一个简单的进度条,通过协程启动。我每隔四分之一秒(0.25f)在一个for循环中屈服,但GUI的进度条每1秒更新一次,而不是每隔四分之一秒。我究竟做错了什么?或者这是一个错误?
IEnumerator Timer() {
float time = 60f;
float tick = 0;
float progress = 0;
float smoothTime = 4f;
while (true) {
progress = (tick/time) * 640f;
Debug.Log("Tick: " + tick);
for (int i = 0; i < smoothTime; i++) {
// THIS SHOULD UPDATE EVERY 1/4th OF A SECOND BUT DOESN'T
rawImageRectTransform.sizeDelta = new Vector2(progress/smoothTime, 10f);
yield return new WaitForSeconds(1f/smoothTime);
}
if (tick >= 60f) {
Debug.Log("*** GAME OVER ***");
break;
}
tick++;
}
}
秒数将显示在进度条上方的GUI文本标签上(该代码不在此处,因为我在创建平滑而准确的进度条时遇到问题)。
使用Unity3D 4.6.3 / C#
答案 0 :(得分:0)
嗯,进度只在while循环开始时改变:
progress = (tick/time) * 640f;
因此,当您输入for循环时,运行以下行:
rawImageRectTransform.sizeDelta = new Vector2(progress/smoothTime, 10f);
对于相同的进度值,它会运行4次,这就是为什么你每秒只能看到一次变化的原因:sizeDelta每秒更改4次到相同的值。