【问题标题】:Unity3D Progress Bar with new GUI, slow updating?带有新 GUI 的 Unity3D 进度条,更新缓慢?
【发布时间】:2015-02-24 01:55:45
【问题描述】:

我创建了一个通过协程启动的简单进度条。我每四分之一秒 (0.25f) 在 for...loop 中输出,但 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#

【问题讨论】:

    标签: unity3d


    【解决方案1】:

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

     progress = (tick/time) * 640f;
    

    因此,当您进入 for 循环并运行该行时:

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

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

    【讨论】:

    • 天哪,我的。这就是在数周内查看您自己的代码时会发生的情况——显而易见的事情变得模糊不清。谢谢。我会删除这个问题,但既然你回答了它,我会给你功劳。
    • 谢谢。第二双眼睛往往会有所帮助^^祝你好运。
    猜你喜欢
    • 2019-09-05
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    相关资源
    最近更新 更多