private GraphicRaycaster RaycastInCanvas;
private EventSystem eventSystem;
private bool isClick;
private Action callBack;
void Start()
{
eventSystem = EventSystem.current;
if (RaycastInCanvas == null)
RaycastInCanvas = GetComponentInParent<GraphicRaycaster>();
}
private void Update()
{
if (Input.GetMouseButtonDown(0))
{
//防止一次点击触发多次
isClick = true;
}
if (Input.GetMouseButtonUp(0))
{
if (isClick)
CheckGuiRaycastObjects();
}
}
public void SetCallBack(Action action)
{
this.callBack = action;
}
public bool CheckGuiRaycastObjects()
{
isClick = false;
PointerEventData eventData = new PointerEventData(eventSystem);
eventData.pressPosition = Input.mousePosition;
eventData.position = Input.mousePosition;
List<RaycastResult> list = new List<RaycastResult>(); //存放当前点击获取到的场景物体
RaycastInCanvas.Raycast(eventData, list);
if (list.Count > 0)
{
//遍历点击到的物体
for (int i = 0; i < list.Count; i++)
{
GameObject go = list[i].gameObject;
if (go.GetComponentInParent<CarriageItem>() != null || go.GetComponent<FreightPop>() != null)
{
return false;
}
}
}
//这里遍历完点击到的物体是空白区域后 做回调
callBack();
return true;
}
点击空白区域关闭弹窗
最新推荐文章于 2023-12-14 15:29:48 发布