Задать вопрос
@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();
            }
        }
    }
  • Вопрос задан
  • 310 просмотров
Подписаться 2 Простой 7 комментариев
Помогут разобраться в теме Все курсы
  • Skillbox
    Профессия Разработчик игр на Unity с нуля
    10 месяцев
    Далее
  • Skillbox
    Middle-разработчик игр на Unity
    3 месяца
    Далее
  • GB (GeekBrains)
    Разработчик Игр на Unity
    10 месяцев
    Далее
Решения вопроса 1
@fghttht Автор вопроса
Проблему решил исключив слой, на котором располагались регионы в компоненте Graphic Raycaster, в параметре blocking mask. EventSystem.current.IsPointerOverGameObject() заработал как надо
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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