Прежде всего OnMouseDown
не вызывается на созданном Button
, но в вашем случае, скорее, на GameObject, к которому прикреплен ваш скрипт.
Тогда
Destroy(gameObject);
точно так же уничтожит GameObject, к которому прикреплен ваш скрипт, а не экземпляры button
GameObjects.
Поскольку вы прокомментировали, что используете компонент UI.Button
, добавьте его к событию onClick
в качестве обратного вызова при создании экземпляра Button
:
public void AddMoreButton()
{
GameObject button = (GameObject)Instantiate(prefabButton);
button.transform.SetParent(panel.transform, false);
button.layer = 5;
button.SetActive(true);
// get the Button on the button object or any child
var buttonInstance = button.GetComponentInChildren<Button>();
// add a callback to destroy the button gameObject
// () => {} is a lambda expression
buttonInstance.onClick.AddCallback(()=>{ Destroy(button); });
}
Небольшая подсказка: в случае, если Button
уже находится в том же GameObject, в любом случае вам лучше изменить сам тип префаба на Button
, например,
public Button prefabButton;
и чем просто использовать
public void AddMoreButton()
{
Button button = Instantiate(prefabButton, panel.transform);
button.gameObject.layer = 5;
button.gameObject.SetActive(true);
// add a callback to destroy the button gameObject
// () => {} is a lambda expression
button.onClick.AddListener(()=>{ Destroy(button.gameObject); });
}