Только что столкнулся. Порывшись на просторах интернета нашёл видео на 5 минут с примером (
https://www.youtube.com/watch?v=ptmum1FXiLE). Чтоб тем кто следом за мной будет искать не переходить лишний раз по ссылкам и не печатать с видео, оставлю свой вариант тут (немного отличается, но суть та же):
1. Если нет прозрачного для рэйкаста UI добавим в скрипт кликабельных объектов, которые могут оказаться под UI :
using UnityEngine.EventSystems;
...
private bool IsPointinOverUI()
{
return UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject();
}
...
public void OnMouseDown()
{
if (IsPointingOverUI() == false)
{
...
2. Если есть прозрачные для рэйкаста UI добавим на них пустой скрипт MouseUIClickthrough.cs и сделаем так:
private bool IsPointingOverUIIgnors()
{
PointerEventData pointerEventData = new PointerEventData(EventSystem.current);
pointerEventData.position = Input.mousePosition;
List raycastResults = new List();
EventSystem.current.RaycastAll(pointerEventData, raycastResults);
return raycastResults.Select(r => r.gameObject.TryGetComponent(out MouseUIClickthrough component) == false).Count() > 1;
}
...
public void OnMouseDown()
{
if (IsPointingOverUIIgnors() == false)
{
...
Больше одного смотрю потому что считает и самого себя