首先参考原文章:http://www.cnblogs.com/fly-100/p/4570366.html
致敬原作者,代码稍作修改才可使用。
首先先引入头文件
using UnityEngine.EventSystems;
using UnityEngine.UI;
然后创建变量
public GameObject changePanel;(这是要阻挡射线的UI)
public EventSystem es;
Graphics a;
主要代码段
bool CheckGuiRaycastObjects()
{
PointerEventData eventData = new PointerEventData(es);
eventData.pressPosition = Input.mousePosition;
eventData.position = Input.mousePosition;
List<RaycastResult> list = new List<RaycastResult>();
changeMatCanvas.GetComponent<GraphicRaycaster> ().Raycast (eventData, list);
return list.Count > 0;
}
在Update中加入
if (CheckGuiRaycastObjects()) return;
这样UI就可以挡住射线,不会点击到后面的碰撞体了。
有个新的解决方法