使用EventSystem.current.IsPointerOverGameObject()
public class Test : MonoBehaviour
{
private void OnMouseDown()
{
// 如果没有点击到UI上
if(!EventSystem.current.IsPointerOverGameObject())
{
Debug.Log("OnMouseDown");
}
}
}
可以重写IsPointerOverGameObject()函数:
public bool IsPointerOverGameObject(Vector2 screenPosition)
{
//实例化点击事件
PointerEventData eventDataCurrentPosition = new PointerEventData(UnityEngine.EventSystems.EventSystem.current);
//将点击位置的屏幕坐标赋值给点击事件
eventDataCurrentPosition.position = new Vector2(screenPosition.x, screenPosition.y);
List<RaycastResult> results = new List<RaycastResult>();
//向点击处发射射线
EventSystem.current.RaycastAll(eventDataCurrentPosition, results);
return results.Count > 0;
}
如果想要UI不检测射线:
1.取消勾选Raycast Target
2.取消勾选interactable
3.删除Canvas 上的Graphic Raycaster组件,之后整个画布下的物体都会失去射线检测效果