VR中實現UI的Button點擊,主要是需要實現IPointerClickHandler接口,因為在Unity將所有的按鈕操作都封裝成了相應的接口,需要相應的功能只需要去實現對應的接口就好了。在這里我們需要先定義一個委托,返回值為空,第一個參數為消息的發送者(即掛載了該腳本的按鈕),第二個參數是存放的一些點擊數據,這個委托的作用就是在按鈕被點擊時所觸發的事件,關於委托、事件如何定義這里就不詳細介紹。所以需要點擊該按鈕實現什么功能就可以將具體的功能寫在具體的實現函數中,如Test腳本中所寫。然后在UIListenerEvent類中,由於繼承了按鈕點擊接口,所以需要實現相應的點擊方法,這個方法是當按鈕被點擊時自動調用的,那么接下來只需要將事件放在該方法中進行執行,就可以實現點擊該按鈕觸發相應的功能了。
以上兩個腳本都掛載到按鈕上、或者任何你希望通過扣動扳機鍵觸發相應行為的物體上。因為這里是用來測試的,所以test中的代碼是在start中直接通過GetComponent找到對應的組件,其實這個腳本的應用還可以更加靈活,即可以在射線進入到某個物體時,再進行組件的獲取,然后進行事件的注冊,當射線離開物體時,再將事件移除。如何獲取射線是否進入到某個物體,這個應該很簡單,詳細去看HTC的api就好或者VRTK。然后發射射線打中按鈕,再扣動扳機鍵,就可以在控制台打印出“按鈕被點擊了”.
還有其他按鈕接口,要想實現其他按鈕功能,只需要同上實現相應的接口就好:
IPointerClickHandler 按鈕點擊
IPointerEnterHandler 射線進入按鈕的時候
IPointerDownHandler 按鈕被按下
IPointerUpHandler 松開按鈕時
IPointerExitHandler 射線離開按鈕時