Unity UGUI被遮挡后如何接收点击(UGUI的穿透点击事件)

  1. 假如Button被一个Image遮挡,则正常情况这个Button被挡住的地方无法接收点击。
  2. 如果想让被挡住部分也接收,则就要把事件从Image中传递下去。(脚本挂在Image上)
    using UnityEngine;
    using UnityEngine.EventSystems;
    using System.Collections.Generic;
    public class Test : MonoBehaviour, IPointerClickHandler ,IPointerDownHandler,IPointerUpHandler 
    {
    	//监听按下
    	public void OnPointerDown(PointerEventData eventData)
    	{
    		PassEvent(eventData,ExecuteEvents.pointerDownHandler);
    	}
    	//监听抬起
    	public void OnPointerUp(PointerEventData eventData)
    	{
    		PassEvent(eventData,ExecuteEvents.pointerUpHandler);
    	}
    	//监听点击
    	public void OnPointerClick(PointerEventData eventData)
    	{
    		PassEvent(eventData,ExecuteEvents.submitHandler);
    		PassEvent(eventData,ExecuteEvents.pointerClickHandler);
    	}
    	//把事件透下去
    	public void  PassEvent<T>(PointerEventData data,ExecuteEvents.EventFunction<T> function)
    		where T : IEventSystemHandler
    	{
    		List<RaycastResult> results = new List<RaycastResult>();
    		EventSystem.current.RaycastAll(data, results); 
    		GameObject current = data.pointerCurrentRaycast.gameObject ;
    		for(int i =0; i< results.Count;i++)
    		{
    			if(current!= results[i].gameObject)
    			{
    				ExecuteEvents.Execute(results[i].gameObject, data,function);
    				//RaycastAll后ugui会自己排序,如果你只想响应透下去的第一个响应,这里ExecuteEvents.Execute后直接break就行。
    				//break;
    			}
    		}
    	}
    }
    
     
    1. 上述代码中,继承需要监听的类,并且实现对应方法。
    2. 在方法中,可以取到eventData对象,使用EventSystem.current.RaycastAll()方法找到所有能传递点击事件的对象,最后使用ExcuteEvents.Execute()方法将事件传递给需要的对象。
    3. 只要脚本还激活中,那么就可以穿过Image点击到Button。前提是要点击在被遮挡住的地方。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值