@fghttht

Как сделать так, чтобы raycast не цеплял объекты, находящиеся под UI?

Есть регионы, нажатия на них отслеживаю при помощи Physics2D.Raycast. Столкнулся с проблемой, что если объект находится под UI, raycast все равно цепляет его. Пробовал пользоваться этим методом EventSystem.current.IsPointerOverGameObject(). Однако если объект находится прямо под UI, он не срабатывает.
Пробовал также отслеживать через event system находится ли курсор на UI, но такая же проблема. Если под UI есть объект, то события не срабатывают. Использовал OnPointerEnter, OnPointerExit.
private void trackMouseClick()
    {
        if (Input.GetMouseButtonDown(0)
            && !EventSystem.current.IsPointerOverGameObject())
        {
            Vector2 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            RaycastHit2D hit = Physics2D.Raycast(mousePosition, Vector2.zero);

            if (hit.collider != null && hit.collider.GetComponent<PolygonCollider2D>() != null)
            {
                Debug.Log("Нажали на регион");
                region = hit.collider.GetComponent<Region>();
                regionButtons.show();
            }
            else
            {
                Debug.Log("Нажали вне региона");
                regionButtons.hide();
            }
        }
    }
  • Вопрос задан
  • 178 просмотров
Решения вопроса 1
@fghttht Автор вопроса
Проблему решил исключив слой, на котором располагались регионы в компоненте Graphic Raycaster, в параметре blocking mask. EventSystem.current.IsPointerOverGameObject() заработал как надо
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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