如何统一实现型号列表中的下一个按钮和上一个按钮?

时间:2019-01-17 10:12:16

标签: c# unity3d

我在列表中列出了10个型号。最初,我的场景中存在一个模型,即模型[0]。单击下一步按钮时,它必须显示模型[1]到模型[9]。类似,前一个按钮的顺序相反。

我已经在代码内部编写了一个逻辑,我知道它不是标准的,但是会做我相信的工作。除了这种逻辑以外,任何简单的实现方式都可以。

public GameObject [] dress;

public void PreviousModel()
{
    int counter = dress.Length;//Dont know what to write here
    Debug.Log(counter);
    if(counter > -1)
    {
        counter--;
        dress[counter].SetActive(true);
        dress[counter+1].SetActive(false);
    }

}

public void NextModel()
{


}

2 个答案:

答案 0 :(得分:3)

应该解决的问题

public GameObject [] dress;

    private int _index;
    public void PreviousModel()
    {
        _index = Mathf.Clamp(_index-1,0,9);
        // code to show your model dress[_index] ...

    }

    public void NextModel()
    {
        _index = Mathf.Clamp(_index+1,0,9);
        // code to show your model dress[_index] ...

    }

答案 1 :(得分:1)

除了使用Clamp的答案外,您还可以像这样围绕索引

public GameObject [] dress;

private int _index;

public void PreviousModel()
{
    // Hide current model
    dress[index].SetActive(false);

    _index--;
    if(index < 0)
    {
        index = dress.Length -1;
    }

    // Show previous model
    dress[index].SetActive(true);
}

public void NextModel()
{
    // Hide current model
    dress[index].SetActive(false);

    _index++;

    if(index > dress.Length -1)
    {
        index = 0;
    }

    // Show next model
    dress[index].SetActive(true);
}

因此,当您单击最后一个条目的下一步时,它将跳转到第一个条目,而不执行任何操作。


如果我理解您的评论

  

索引值我要与场景中存在的模型相同

正确的意思是,在此脚本开始时,您需要获取当前索引依赖于当前活动模型:

private void Start()
{
    // Get the index of the currently active object in the scene
    // Note: This only gets the first active object
    // so only one should be active at start
    // if none is found than 0 is used
    for(int i = 0; i < dress.Length; i++)
    {
        if(!dress[i].activeInHierachy) continue; 

        _index = i;
    }


    // Or use LinQ to do the same
    _index = dress.FirstOrDefault(d => d.activeInHierarchy);
}