VR中射線點擊按鈕的實現

   VR中實現UI的Button點擊,主要是須要實現IPointerClickHandler接口,由於在Unity將全部的按鈕操做都封裝成了相應的接口,須要相應的功能只須要去實現對應的接口就行了。在這裏咱們須要先定義一個委託,返回值爲空,第一個參數爲消息的發送者(即掛載了該腳本的按鈕),第二個參數是存放的一些點擊數據,這個委託的做用就是在按鈕被點擊時所觸發的事件,關於委託、事件如何定義這裏就不詳細介紹。因此須要點擊該按鈕實現什麼功能就能夠將具體的功能寫在具體的實現函數中,如Test腳本中所寫。而後在UIListenerEvent類中,因爲繼承了按鈕點擊接口,因此須要實現相應的點擊方法,這個方法是當按鈕被點擊時自動調用的,那麼接下來只須要將事件放在該方法中進行執行,就能夠實現點擊該按鈕觸發相應的功能了。api

  /// <summary>
    /// UI監聽事件
    /// </summary>
    public class UIListenerEvent : MonoBehaviour, IPointerClickHandler
    {

        public delegate void PointerClick(GameObject sender, PointerEventData eventData);
        public event PointerClick PointClickHandle;
        /// <summary>
        /// 當按鈕被點擊時觸發
        /// </summary>
        /// <param name="eventData"></param>
        public void OnPointerClick(PointerEventData eventData)
        {
            if (PointClickHandle != null) PointClickHandle(gameObject, eventData);
        }

    }

    /// <summary>
    /// 測試
    /// </summary>
   public class Test:MonoBehaviour{

    private void Start(){

        //註冊按鈕被點擊事件
        GetComponent<UIListenerEvent>().PointClickHandle += ClickTest;

    }

    private void ClickTest(GameObject sender,PointerEventData eventData){

        Debug.Log("按鈕被點擊了");

    }

  }

      以上兩個腳本都掛載到按鈕上、或者任何你但願經過扣動扳機鍵觸發相應行爲的物體上。由於這裏是用來測試的,因此test中的代碼是在start中直接經過GetComponent找到對應的組件,其實這個腳本的應用還能夠更加靈活,便可以在射線進入到某個物體時,再進行組件的獲取,而後進行事件的註冊,當射線離開物體時,再將事件移除。如何獲取射線是否進入到某個物體,這個應該很簡單,詳細去看HTC的api就好或者VRTK。而後發射射線打中按鈕,再扣動扳機鍵,就能夠在控制檯打印出「按鈕被點擊了」.app

還有其餘按鈕接口,要想實現其餘按鈕功能,只須要同上實現相應的接口就好:函數

IPointerClickHandler    按鈕點擊測試

IPointerEnterHandler     射線進入按鈕的時候spa

IPointerDownHandler     按鈕被按下code

IPointerUpHandler         鬆開按鈕時繼承

IPointerExitHandler       射線離開按鈕時接口

相關文章
相關標籤/搜索