关于UGUI的EventTrigger无法响应控件的Interactable的解决办法

用惯了NGUI的EventListener写按钮监听,所以也想在UGUI里用同样的方式进行按钮监听。看了网上的方式用EventTrigger重写了控件的各个事件,发现了个问题,就是在控件的Interactable属性为false的情况下依旧响应事件,网上也没搜到什么办法,结果折腾了半天发现这个问题其实很好解决。
  两个办法:

  1. 在禁用按钮时也禁用控件ImageRaycast Target
       gameObject.GetComponent<Image>().raycastTarget = false;
       gameObject.GetComponent<Button>().interactable = false;
  1. 如果不想禁用Raycast Target就只能在重写的方法或实现接口中判断当前点击物体身上可交互组件的Interactable值。
public void OnPointerClick(PointerEventData eventData)
    {
        Button temp = GetComponent<Button>();
        if (onClick != null && temp.interactable) onClick(gameObject);
    }

由于可交互组件不只有Button,可能需要再判断前先判断物体上的交互组件是什么,比如:

    public void OnPointerClick(PointerEventData eventData)
    {
        Selectable temp = eventData.pointerPress.GetComponent<Selectable>() != null ?
            eventData.pointerPress.GetComponent<Selectable>() : eventData.pointerPress.GetComponent<Button>() as Selectable != null ?
            eventData.pointerPress.GetComponent<Button>() as Selectable : eventData.pointerPress.GetComponent<Toggle>() as Selectable != null ?
            eventData.pointerPress.GetComponent<Toggle>() as Selectable : null;
        if (temp == null) return;
        if (onClick != null && temp.interactable) onClick(gameObject);
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容