在用UGUI的时候遇到了鼠标穿透的问题,就是说在UGUI和3D场景混合的情况下,点击UI区域同时也会 触发3D中物体的鼠标事件。
这是比较笨的方法:
if (UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject())
return;
好一点的方法
bool CheckGUIRaycastObjects() //检测
{
PointerEventData data = new PointerEventData(m_EventSystem);//m_EventSystem是游戏中EventSystem对象的组件
data.pressPosition = Input.mousePosition; //获取鼠标位置
data.position = Input.mousePosition; //获取鼠标位置
List<RaycastResult> result = new List<RaycastResult>(); //创建一个获得 RaycastResult的list
m_Raycaster.Raycast(data, result); // m_Raycaster 是Canvas的组件
return result.Count > 0; //判断射线碰撞的结果是否大于0,大于0则返回true,否则返回false
}