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

  • 相关阅读:
    【转】请说出三种减少页面加载时间的方法。
    【转】Web前端性能优化——如何提高页面加载速度
    【转】数据分析sql常用整理
    【转】消息中间件系列之简单介绍
    Could not load file or assembly 'System.Core, Version=2.0.5.0 和autofac冲突的问题
    云主机与传统主机性能对比表
    真假云主机,VPS资料集合
    将网站部署到windows2003 iis6之后,出现asp.net程序页面无法访问情况
    想当然是编程最大的坑,记更新删除过期cookie无效有感
    FlashBuilder(FB/eclipse) 打开多个无效
  • 原文地址:https://www.cnblogs.com/mufei/p/10077169.html
Copyright © 2020-2023  润新知