Unity:进度条

时间:2017-06-01 19:02:13

标签: c# arrays unity3d unityscript

我正在尝试制作一个简单的演示应用,但我无法弄清楚如何让进度条工作。基本上该栏将有7个点,与演示幻灯片的数量相同。我想当用户在演示文稿5时将进度条设为5分,同时将当前演示文稿的精灵变为绿色,之前的所有精灵都变为蓝色。当用户进入下一个时,我将点6更改为绿色,将前5点更改为蓝色,依此类推。我有下一个和上一个按钮。我正在尝试这样做,但我不能让逻辑按我的意愿工作。

1 - 我似乎无法获得当前的幻灯片索引,因此我可以将该点切换为绿色精灵

2 - 有一点永远不会受到影响,我不知道为什么......

这是我到目前为止所做的。

public Image[] sliderDotsImages;
private int sliderIndex = 0;


private bool nextBtn;
private bool isPower;


public Sprite currentState;
public Sprite oldState;
public Sprite blankState;

private void Dots()
{
    if (sliderDotsImages.Length > 7 || sliderIndex < 0 ) return;



    if (nextBtn)
    {

        if (sliderDotsImages.Length >= sliderIndex)
        {
            for ( int i = 0; i < sliderIndex;  i++)
            {
                sliderDotsImages[sliderIndex].enabled = true;

            //          sliderDotsImages[i].sprite = oldState;
            }

        }   
    }

    else
    {
        Debug.Log (sliderIndex);
        sliderDotsImages[sliderIndex].enabled = false;

    }
}

// Event attached to button 
public void Next ()
{
    if (sliderIndex < 0 ) sliderIndex = 0;
    nextBtn = true;

    // add point
    sliderIndex++;

    // Refresh dots 
    Dots();
}


// Event attached to button 
public void Previous ()
{
    if (sliderIndex > 7 ) sliderIndex = 7;

    nextBtn = false;
    sliderIndex--;
    Dots();

}

1 个答案:

答案 0 :(得分:2)

Egads花了一点时间通过评论弄清楚地球上的提问者的问题是什么。现在我已经明白了这门课应该做什么......这就是你如何修复它。

抛弃那个循环,你不需要它,它只会让你的问题更糟因为如果你在第6页你不需要查看第1页的精灵。那里有第1页的精灵无需更新。一直都是。不,不是那么。

你有一个3状态系统需要跟踪“以前访问过的”“尚未访问”和“当前正在查看”。你不能用一个布尔值来做这件事。但是,我们可以使用我们对系统的了解来做一点作弊:唯一需要更新的点就是我们只是在看的那个和我们的那个重新开始看。

你也(两次)声明你不知道如何“获得当前的幻灯片索引”,尽管有一个变量字面上是那个东西: sliderIndex

现在。

public void Next ()
{
    if (sliderIndex >= 6 ) return; //if on page 7, abort: there is no page 8
    sliderDotsImages[sliderIndex].sprite = oldState; //#1, #2
    sliderIndex++; //#3
    sliderDotsImages[sliderIndex].sprite = currentState; //#4
    sliderDotsImages[sliderIndex].enabled = true; //#5
}

public void Previous ()
{
    if (sliderIndex <= 0 ) return; //if on page 1, abort: there is no page 0
    sliderDotsImages[sliderIndex].sprite = oldState; //#1, #2
    sliderIndex--; //#3
    sliderDotsImages[sliderIndex].sprite = currentState; //#4
}

这是这样做的:

  1. 我们得到代表我们正在看的页面的点。
  2. 我们将其精灵设置为旧(蓝色)。
  3. 那么我们会切换到我们即将关注的页面。
  4. 我们将那个精灵设置为当前(绿色)
  5. 如果我们转到下一张幻灯片,我们也会启用图片。我们永远不需要禁用它,因为一旦我们查看了一个页面,它就会被查看。
  6. 此外,如果我们的精灵索引超出范围使其值成为有效值,而不是做奇怪的事情,我们通过提前返回来防止它首先超出界限。