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. Redis(二)安全设置

    redis是一款流行的内存数据库,默认是无密码登录,若出于安全考虑,需要为其加上控制权限,则可以通过以下2种方法来设置. 1. 采用绑定IP的方式来进行控制(比较安全的方法) 在redis.conf( ...

  2. 循环获取某个class下的多个select的选中值

    //循环获取某个class下的多个select的选中值 function eachSelect(cla){ var val = ""; $("."+cla).e ...

  3. 面试 : C语言 功底 被 鄙视了

    第一道:被鄙视 的 C语言语法问题 请看 下面 程序 : 错误程序: void GetMemory( char *p ){ p = (char *) malloc( 100 );}void Test( ...

  4. leetcode -50. Pow(x, n) Accepted

    前言:其实之前自己也有了解关于算法数据结构的一点内容,但是都是用相应的开发工具来写相应的代码,今天面试的时候直接leetcode来写代码,还是用的体内根深蒂固的C和Java来解的题,毕竟目前没见支持O ...

  5. oracle的sys和system的默认密码

    oracle的sys和system默认密码system默认:manager sys默认:change_on_install使用PL/SQL Plus登录数据库时,system用户使用密码manager ...

  6. iOS:手势与矩形、点运算相关(18-01-24更)

    1.矩形.点运算 1.获取当前的View在Window的frame 2.包含判断 3.获取点击在响应者 touchesBegan 的位置 4.UIScrollView.UITableView 实时 位 ...

  7. MAC 相关

    1.找回个人收藏下的消失项,如文稿等   点击个人收藏中下的任意项,如桌面.下载等,按住Command+上箭头,出现如下界面,拖住消失项添加到个人收藏即可

  8. iOS TabBarItem设置红点(未读消息)

    实现原理: 其实是自定义一个view,将view添加到UITabBar上面,也可以是一个按钮,设置背景图片,和label.废话少说直接上代码搞一个UITabBar的分类 #import <UIK ...

  9. c++友元函数、友元类、友成员函数

    友元函数:不是类成员函数,是一个类外的函数,但是可以访问类所有成员. class Point{ public: friend void fun(Point t);//友元函数 private: int ...

  10. new和delete的三种形式详解

    一.new操作符.delete操作符 class String { public: String(const char *str="") { if(str== NULL) { da ...