示例
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class MyTest : MonoBehaviour
{
private GraphicRaycaster _graphicRaycaster; // 图形射线发射器
private void Start()
{
_graphicRaycaster = FindObjectOfType<GraphicRaycaster>();
}
private void Update()
{
if (Input.GetMouseButtonDown(0))
{
Debug.Log($"HasUI: {HasUI()}");
}
}
/// <summary>
/// 检测是否是有UI
/// - 带事件的3D物体也返回true
/// </summary>
/// <returns></returns>
private bool IsPointerOverGameObject()
{
return EventSystem.current.IsPointerOverGameObject();
}
/// <summary>
/// 检测是否有UI
/// - 只会检测图形,带事件的3D物体返回false
/// </summary>
/// <returns></returns>
private bool HasUI()
{
// 检测当前鼠标位置
var pointerEventData = new PointerEventData(EventSystem.current)
{
position = Input.mousePosition
};
var results = new List<RaycastResult>();
_graphicRaycaster.Raycast(pointerEventData, results);
return results.Count > 0;
}
}