@niklazh
да.

Как проверять столкновение префаба и UI панели в Unity?

у меня в игре есть меню, в котором можно перетаскивать обекты(зажимая его он создаёт префаб и уже его можно таскать), но надо сделать так чтобы объект удалялся если вынести его за пределы меню, тобишь избежать подобных ситуаций:
659bdc68d9622286925945.png

код самой основной кнопки(не префаба) такой:
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);
        }

    }
  • Вопрос задан
  • 75 просмотров
Пригласить эксперта
Ответы на вопрос 1
freeExec
@freeExec
Участник OpenStreetMap
Если у тебя всё уишное, то коллайдеры тут и не нужны. Воспользуйся событием на панели OnDrop
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы