у меня в игре есть меню, в котором можно перетаскивать обекты(зажимая его он создаёт префаб и уже его можно таскать), но надо сделать так чтобы объект удалялся если вынести его за пределы меню, тобишь избежать подобных ситуаций:
код самой основной кнопки(не префаба) такой:
public GameObject Moving;
//тут просто переменные
[SerializeField] private GameObject Menu;
[SerializeField] private GameObject Block;
[SerializeField] private Collider2D container;
[SerializeField] private Collider2D BlockCollider;
//это случается при нажатии на кнопку(на ней стоит ивент на pointed down)
public void Onclicked()
{
Block = Instantiate(Moving);
Block.transform.position = Input.mousePosition;
Block.transform.SetParent(Menu.transform);
}
а вот тут происходит интересное, тут нужна проверка что если ты отжал кнопку и она не была в поле панели, тогда её нужно уничтожать
//когда кнопку отжимаешь (pointed up)
public void OnClickedStop()
{
if (BlockCollider == container)
{
Destroy(Block.gameObject);
}
}
//ну тут просто чтобы её вообще можно было перетаскивать
public void OnDrag()
{
Block.transform.position = Input.mousePosition;
}
/*и тут тоже нужно сделать проверку столкновения чтобы и когда перетаскивание заканчивалось, тоже удался объект
если он не в зоне панели */
public void OnDragEnd()
{
if (BlockCollider == container)
{
Destroy(Block.gameObject);
}
}
в принципе проблема возникает там, но на всякий случай, вот код префаба, он нужен когда ты уже отжал кнопку и нужно
снова допустим его перетащить, тот код работал пока ты зажимал на основной кнопке
[SerializeField] public Collider2D container;
[SerializeField] private Collider2D BlockCollider;
// Update is called once per frame
public void DragItem()
{
transform.position = Input.mousePosition;
}
public void DeleteItem()
{
if (BlockCollider == container)
{
Destroy(this.gameObject);
}
}