unity中 当UI控件显示在屏幕前 点击只希望UI有效果,而不希望出现穿透。
解决方案 如下:
//引入命名空间
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class Test : MonoBehaviour
{
//声明
EventSystem eventsystem;
GraphicRaycaster RaycastInCanvas;
void Awake()
{
//指定
RaycastInCanvas = GameObject.Find("Canvas").GetComponent<GraphicRaycaster>();
}
void Update
{
//如果先接触的是UI就return 不执行额外点击事件
if (CheckGuiRaycastObjects())
return;
//对于游戏世界内3D物体的点击事件
if(Input.GetMouseButtonDown(0))
{
... //略
}
}
//检测是否接触到UI
bool CheckGuiRaycastObjects()
{
PointerEventData eventData = new PointerEventData(eventsystem);
eventData.pressPosition = Input.mousePosition;
eventData.position = Input.mousePosition;
List<RaycastResult> list = new List<RaycastResult>();
RaycastInCanvas.Raycast(eventData, list);
return list.Count > 0;
}