UGUI_PointerEventData()__检测鼠标点击的位置上,所包含的全部UI控件

需求:有时候拖动/点击UI时,需要判断鼠标所在位置上,对重叠的UI进行分别的处理

实现:利用PointerEventData()

 

一;判断当前鼠标上重叠的UI有多少个

    private int IsPointerOverUIObject()
    {
        PointerEventData eventDataCurrentPosition = new PointerEventData(EventSystem.current);
        eventDataCurrentPosition.position = new Vector2(Input.mousePosition.x, Input.mousePosition.y);

        List results = new List();
        EventSystem.current.RaycastAll(eventDataCurrentPosition, results);

        return results.Count;

 

二:继承IPointerClickHandler接口(点击),实现OnPointerClick(PointerEventData eventData)方法,可用于触发点击位置上的全部UI,其他接口也类似这样

 

    public void OnPointerClick(PointerEventData eventData)
    {
        PassEvent(eventData, ExecuteEvents.pointerClickHandler);
    }

    //把事件透下去
    public void PassEvent(PointerEventData data, ExecuteEvents.EventFunction function) where T : IEventSystemHandler
    {
        List results = new List();
        EventSystem.current.RaycastAll(data, results);

        for (int i = 0; i < results.Count; i++)
        {
            ExecuteEvents.Execute(results[i].gameObject, data, function);//响应点击位置上的全部UI
        }

    }

 

你可能感兴趣的:(Unity)