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       射线离开按钮时接口

相关文章
相关标签/搜索