VR中射線點擊按鈕的實現


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

  /// <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。然后發射射線打中按鈕,再扣動扳機鍵,就可以在控制台打印出“按鈕被點擊了”.

還有其他按鈕接口,要想實現其他按鈕功能,只需要同上實現相應的接口就好:

IPointerClickHandler    按鈕點擊

IPointerEnterHandler     射線進入按鈕的時候

IPointerDownHandler     按鈕被按下

IPointerUpHandler         松開按鈕時

IPointerExitHandler       射線離開按鈕時


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM