用自訂方式觸發 uGUI - Trigger uGUI object without click
這幾天我需要實作一個功能:在遊戲中用準星瞄準、射擊來觸發 uGUI 元件。
很直覺的我在 uGUI 元件上加上 Collider,並用 Raycast 來觸發;不過反覆調整之後還是無法順利觸發 uGUI 元件,直到朋友給了我不同的思考方向,才成功完成實作。這個新的實作方向,同樣是利用 Raycast,不過我們不用來觸發 Collider,而是仿照點擊觸發的流程,觸發 uGUI 的 EventHandler。
完成了這個實作之後,同理類推,便能用各式各樣自訂的方式來觸發 uGUI,讓 uGUI 不一定只適用在點擊觸發的操作介面上,可以發展各式各樣的創意。
利用程式自行觸發 uGUI 的 EventHandler
1 | using UnityEngine; |
- Line 7:模擬點擊的位置。
- Line 8:用來發布 Raycast 觸發結果的 List,要注意這邊官方文件用 “發布” 這個字,而不是用回傳值的方式來接收,所以這個 List 的 new() 以及 Clear() 必須自行處理。
- Line 13:此處要記得轉換成 Screen 坐標系的位置,不是 World 也不是 Local。
- Line 15:運作點擊事件。
- Line 17~21:處理點擊的結果。