關于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);
    }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容