具有新GUI的Unity3D Progress Bar,缓慢更新?

时间:2015-02-23 17:45:53

标签: unity3d

我创建了一个简单的进度条,通过协程启动。我每隔四分之一秒(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#

1 个答案:

答案 0 :(得分:0)

嗯,进度只在while循环开始时改变:

 progress = (tick/time) * 640f;

因此,当您输入for循环时,运行以下行:

rawImageRectTransform.sizeDelta = new Vector2(progress/smoothTime, 10f); 

对于相同的进度值,它会运行4次,这就是为什么你每秒只能看到一次变化的原因:sizeDelta每秒更改4次到相同的值。