我在列表中列出了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()
{
}
答案 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);
}