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

VR中射线点击按钮的实现的更多相关文章

  1. Android中在fragment中实现点击按钮事件

    在fragment不能直接进行点击事件,需要放到oncreatActivity中 具体方法如下: 需要注意的是import android.support.v4.app.Fragment;导入的这个包 ...

  2. vue 项目, 通知子组件更新,父组件中每次点击按钮重新加载子组件,(重新生成dom 元素)

    vue是组件化开发的项目,很多情况下会把公共组件提取出来,来减少代码量,提高开发效率,和以后更好的可维护性.很多情况下,父组件中都会引用子组件这种情况.通过给在父组件中引用的子组件标签上添加属性,来渲 ...

  3. vue项目中,点击按钮复制其内容

    <el-table-column label="推广链接" align="center"> <template slot-scope=&quo ...

  4. asp.net中当点击按钮时出现grid编辑弹框

    <dx:ASPxButton runat="server" ID="NewGridButton" Text="新增授权" CssCla ...

  5. jsp 中实现点击按钮 实现页面跳转到HTML

    <input type ="button" value="跳转" onclick="window.location.href='main.htm ...

  6. html网页中 点击按钮页面跳转

    在html页面中 实现点击按钮页面跳转.语句如下: <input type="button" value="跳转" onClick="windo ...

  7. 解决关于 vue项目中 点击按钮路由多了个问号

    问题描述: 在vue项目开发过程中,点击按钮结果页面刷新了一遍 后来发现路径变成了 localhost:8080/?#/login 原因: 这里是 form 表单,点击了button 按钮,触发了他的 ...

  8. 21、解决关于 vue项目中 点击按钮路由多了个问号

    在vue项目开发过程中,点击按钮结果页面刷新了一遍 后来发现路径变成了 localhost:8080/?#/login 原因: 这里是 form 表单,点击了button 按钮,触发了他的默认事件,就 ...

  9. 在Activity中响应ListView内部按钮的点击事件

    最近交流群里面有人问到一个问题:如何在Activity中响应ListView内部按钮的点击事件,不要在Adapter中响应? 对于这个问题,我最初给他的解答是,在Adapter中定义一个回调接口,在A ...

随机推荐

  1. Yum 下载安装包及对应依赖包

    Yum 下载安装包及对应依赖包: 安装该软件:yum install -y yum-plugin-downloadonly 以下载 openssh-server 为例 yum install -y o ...

  2. Visual Studio 2017 安装过程问题解决

    VS已经发布了两三天了,我也着手安装,但是折腾了两个晚上,怎么都到不了安装界面(选择模块的界面),各种尝试,各种重启,也并不顶什么卵用~ 后来经过各种查LOG,发现我电脑访问不了https://dow ...

  3. jquery css选择器

    1. $('node+next') == $('node').next() 2. $('node~siblings') == $('node').nextAll(); 3. :gt(index)大于i ...

  4. 【HTML-进阶-如何实现父级块级元素宽度自适应子元素宽度】

    背景 块级元素宽度默认值为100%,而不是auto;因此其宽度不会根据子元素内容动态适应. 如何实现父级元素宽度动态适应其子元素. 方法一 display:inline; 给块级元素设置inline- ...

  5. Vcenter虚拟化三部曲----SQL Server 2008 R2 数据库安装

    操作系统    Windows server 2008 R2 数据库      SQL Server 2008 R2 注意:SQL Server 2008 R2需要操作系统首先安装.NET Frame ...

  6. 转:介绍几个著名的实用的Java反编译工具,提供下载

    from :http://www.glorze.com/219.html 反编译 众所周知,我们将源代码进行编译,生成可执行的程序或者容器发布包,这个将代码转换的过程就是编译的过程,而反编译就是将这些 ...

  7. 前端应该掌握的ps知识

    你说有美图秀秀之后PS要over了,NO PS 依旧很重要,当然除了修人像,比如切图什么的 来吧 开始吧 在开始切图之前,先科普几个小技巧 1. 如果快速从大图中拿出自己想要的小图 : 需求:快速拿出 ...

  8. 基于 HTML5 Canvas 的 Web SCADA 组态电机控制面板

    前言 HT For Web 提供完整的基于 HTML5 图形界面组件库.您可以轻松构建现代化的,跨桌面和移动终端的企业应用,无需担忧跨平台兼容性,及触屏手势交互等棘手问题.也可用于快速创建和部署,高度 ...

  9. 用DBCC CHECK修复SQL2000的数据库一致性问题

    ) set @databasename='需要修复的数据库实体的名称' exec sp_dboption @databasename, N'single', N'true' --将目标数据库置为单用户 ...

  10. 嵌入式C语言自我修养 10:内联函数探究

    10.1 属性声明:noinline & always_inline 这一节,接着讲 __atttribute__ 属性声明,__atttribute__ 可以说是 GNU C 最大的特色.我 ...