Страница 1 из 1

Игнорирование мыши

СообщениеДобавлено: 16 май 2022, 22:38
ustas235
Добрый день, народ.
Есть игровое поле(зеленое) с игровыми объектами (красные) и панелью с кнопками меню (белое):
Изображение
Объекты реагируют на нажатие мыши, в том числе и те что находятся под панелью с меню.
Как сделать так, чтобы объекты под панелью с меню не реагировали на нажатие мышкой?
Панель с меню у меня размещена на Canvas'e.
Проверка EventSystem.current.IsPointerOverGameObject() работает под Windows, но под андройдом не работает.
Я хотел повесить OnMouseDown() на панель с меню, чтобы попытаться перехватить клики, но похоже объекты размещенные на Canvas не реагируют на мышь.
Помогите советом.

Re: Игнорирование мыши

СообщениеДобавлено: 16 май 2022, 23:01
1max1
Перевести крайние точки меню в ворлд координаты (если канвас в оверлее) и по ним растянуть коллайдер. Или в обработке клика кидать через графический рейкастер рейкаст и проверять нет ли там юи.

Re: Игнорирование мыши

СообщениеДобавлено: 16 май 2022, 23:34
ustas235
Спасибо. Про рэйкаст думал, но надеялся на что-то по проще. Буду раскуривать рэйкаст.
В общем, как я не раскуривал, но Raycast отказывался видеть объекты на Canvas'е. Не удалось мне его раскурить.
Но нашел в соседней ветке вот такое решение, оно работает и под Windows и под Android

Синтаксис:
Используется csharp
private static bool IsPointerOverUIObject()
    {
        PointerEventData eventDataCurrentPosition = new PointerEventData(EventSystem.current);
        eventDataCurrentPosition.position = new Vector3(Input.mousePosition.x, Input.mousePosition.y, Input.mousePosition.z);
        List<RaycastResult> results = new List<RaycastResult>();
        EventSystem.current.RaycastAll(eventDataCurrentPosition, results);
        return results.Count > 0;
    }