到目前爲止,UGUI組件功能還很侷限,這就需要開發者自己動手實現某些開發需求。UGUI中的組件(以按鈕Button爲例)默認響應事件的區域爲整個UI元素區域,我們也可以自定義精靈某些特定區域用來響應事件。
我們知道所有UI都有Image組件,其中有RaycastTarget屬性,勾選該屬性爲true則表示運行時UI精靈會響應相應交互事件,這套UGUI(包括NGUI)是通過射線檢測實現的交互響應,那麼我們可以通過添加可編輯碰撞器的方式,修改Image默認檢測區域:
現在我們想要點擊按鈕中間三角形區域按鈕纔有效,需要刪除Button原有Image組件,接着爲按鈕Button添加PolygonCollider2D組件:
點擊EditCollider編輯該多邊形碰撞器,
接着我們添加一個C#類:CustomButtonArea,該類繼承自Image,我們查看Image中原生方法,發現有如下內容:
完整代碼截圖如下:
我們重寫了Image中一個返回值爲Bool的是否爲射線檢測區域的方法,
爲Button添加自定義類,運行unity,我們發現整個按鈕只有點擊中間三角形區域按鈕纔有響應。