Как уничтожить динамические элементы из панели в скрипте Unity C # - PullRequest
0 голосов
/ 19 мая 2019

Попытка удалить элементы с панели (очистить ее), а затем снова заполнить панель новыми элементами (кнопками)

Я уже пытался удалить каждый элемент с foreach, который вы видите ниже, но безуспешно

public GameObject Button;
public Transform buttonContainer;
public void create_buttons(Orbital o)
{
    GameObject go = Instantiate(Button);
    var panel = GameObject.Find("station_panel");
    //Destroy(GameObject.Find("station_panel"));

    foreach (UnityEngine.UI.Button b in panel.GetComponents<UnityEngine.UI.Button>())
    {
        //Destroy(b.gameObject);
        b.enabled = false;
    }

    go.transform.position = panel.transform.position;
    go.GetComponent<RectTransform>().SetParent(panel.transform);
    //go.GetComponent<RectTransform>().SetInsetAndSizeFromParentEdge(RectTransform.Edge.Left, 0, 10);

    go.GetComponent<UnityEngine.UI.Button>().onClick.AddListener(() => onClick());
    go.GetComponentInChildren<Text>().text = o.name;
}
void onClick()
{
    Debug.Log("aaaaaaaaaaaaaaa");


    canvas.enabled = false;
}

Ответы [ 2 ]

1 голос
/ 20 мая 2019

Иерархия преобразования панели содержит ссылку на них.

Transform panelTransform = GameObject.Find("station_panel").transform;
foreach(Transform child in panelTransform) {
    Destroy(child.gameObject);
}
0 голосов
/ 19 мая 2019

Создайте список и добавьте любую кнопку, созданную для вашей панели.

Как только вы захотите очистить его, очистите этот список, но GetCompoenents не вернет все кнопки в игровом объекте Panel, поскольку вы не можете добавить 2Компонент кнопки для одного игрового объекта.

Также добавьте -using UnityEngine.UI- в верхнюю часть вашего скрипта, чтобы его можно было легко прочитать, чтобы он был похож на

 foreach (Button b in list)
{
    Destroy(b.gameObject);        
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...