Unity3d:在点击产生新游戏对象之前销毁子对象

时间:2019-04-30 13:33:27

标签: list unity3d button

我有一组用于实例化不同游戏对象的主按钮,当我在这些主按钮之间切换时,它将清除显示面板中的所有子对象,然后根据其内容调用实例化函数。

这行得通,但结果并不理想,我单击了一个清除孩子的主按钮,但没有立即产生新的孩子,我不得不再次单击它,然后显示其内容。

第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循环部分中将值检索到此列表的位置,则需要更长的时间。

1 个答案:

答案 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);
        }
    }
}