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. 安装Windows7步骤

    我初次装Linux系统的时候,查过一些资料,然后也有网友教过我,这里做一个总结,和大家分享一下(U盘安装).       事实上我们平时电脑开机的时候,是有个启动顺序的,他并非直接进入我们的操作系统, ...

  2. linux SVN添加新用户

    首先找到用户文件:authz.conf; 用vi 编辑authz.conf文件在develps 后面添加你要添加的用户名:如图:  上图:cheny就是我后面添加上去的用户名 按Esc :wq保存au ...

  3. sharepoint rest api Add ListItem 报错

    Recently, I was trying to create a list item using Rest API on Sharepoint 2013. I got the following ...

  4. 记2019年目标之一没有996的大数据分析BI实战历程

    本文略长,阅读大约需要10分钟. 懵懵懂懂的学习了python,然后一发不可收拾的爱上了python大数据分析,慢慢的走进了大数据的学堂,学习如何大数据挖掘,大数据分析,到BI系统建设使用. 大数据的 ...

  5. java二维码工具类,中间带LOGO的,很强大

    jar包下载maven 配置: Xml代码 收藏代码 <dependency> <groupId>com.google.zxing</groupId> <ar ...

  6. [iOS]CIDetector之CIDetectorTypeFace人脸识别

    - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...

  7. Oracle 表空间、段、区和块简述

    数据块(Block) 数据块Block是Oracle存储数据信息的最小单位.注意,这里说的是Oracle环境下的最小单位.Oracle也就是通过数据块来屏蔽不同操作系统存储结构的差异.无论是Windo ...

  8. $(document).ready(function(){})与window.load

    $(document).ready(function(){ //to do something}) 是当文档全部加载完全的时候触发,包括img也加载完成但是相关的文件没有下载下来,能同时编写多个 wi ...

  9. 1015 德才论(sort、结构体vector)

    题目: 宋代史学家司马光在<资治通鉴>中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人.凡取人之术,苟不得圣人,君子而与之,与其得小人,不 ...

  10. vmware虚拟机下linux centos6.6只有lo,没有eth0网卡、随机分配ip地址,固定ip地址等问题

    这个问题卡了我一天多的时间,百度上搜出来的问题五花八门,反而把我给搞糊涂了.最后总算是实践成功了,记录一下配置的过程. 配置网卡和随机分配ip地址 我安装的是basic server版本,用的是NAT ...