我有一组用于实例化不同游戏对象的主按钮,当我在这些主按钮之间切换时,它将清除显示面板中的所有子对象,然后根据其内容调用实例化函数。
这行得通,但结果并不理想,我单击了一个清除孩子的主按钮,但没有立即产生新的孩子,我不得不再次单击它,然后显示其内容。
第1部分
public void OnClicked(){
GameObject _manager = GameObject.Find("Manager");
_manager.gameObject.GetComponent<managerSystem>().clearSubList();
}
public void OnClicked2(){
GameObject _manager = GameObject.Find("Manager");
_manager.gameObject.GetComponent<managerSystem>().getSubList(transform.name);
}
第2部分
public void clearSubList(){
foreach (Transform child in SubScroll.transform) {
Destroy(child.gameObject);
}
}
第3部分
public void getSubList(string theBName){
currentSubName = new List<string>();
currentSubPrice = new List<string>();
for (int i = 0; i < reader.Length; i++ ){
if (SubScroll.transform.childCount != reader.Length){
GameObject go = Instantiate(subListButton, SubScroll.transform);
string [] x = reader[i].Split('/');
if (x.Length == 2){go.name = x[0]; currentSubName.Add(x[0]); currentSubPrice.Add(x[1]);}
if (x.Length == 3){go.name = x[0] + " " + x[1]; currentSubName.Add(x[0] + " " + x[1]); currentSubPrice.Add(x[2]);}
Array.Clear(x, 0, x.Length);
}
}
是否也要清除我一开始也打电话的列表?我已经改变了不同的方式,但是这对我来说最合适,第2部分中的两个列表,它们基于文本文件的名称并解析其行来获取内容,我删除了该部分代码,因为这样做如果同样想知道在for循环部分中将值检索到此列表的位置,则需要更长的时间。
答案 0 :(得分:0)
在第1部分中:看起来您已经将两个方法都放在了相同的按钮单击上。由于这两种方法将同时运行,因此可能无法正常工作。
当您尝试先清除所有子项然后生成新对象时,因此,可以通过组合两种方法来实现。我合并了两个onclick方法并修改了代码。让我知道是否有帮助。
新部分1:
public void onClickClearAndSpawnSublist() {
GameObject _manager = FindObjectOfType(typeof(managerSystem));
_manager.ClearAndSpawnSublist();
}
新部分3:
public void ClearAndSpawnSublist(string theBName) {
foreach (Transform child in SubScroll.transform)
{
Destroy(child.gameObject);
}
currentSubName = new List<string>();
currentSubPrice = new List<string>();
for (int i = 0; i < reader.Length; i++)
{
if (SubScroll.transform.childCount != reader.Length)
{
GameObject go = Instantiate(subListButton, SubScroll.transform);
string[] x = reader[i].Split('/');
if (x.Length == 2) { go.name = x[0]; currentSubName.Add(x[0]); currentSubPrice.Add(x[1]); }
if (x.Length == 3) { go.name = x[0] + " " + x[1]; currentSubName.Add(x[0] + " " + x[1]); currentSubPrice.Add(x[2]); }
Array.Clear(x, 0, x.Length);
}
}
}