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 射线离开按钮时
VR中射线点击按钮的实现的更多相关文章
- Android中在fragment中实现点击按钮事件
在fragment不能直接进行点击事件,需要放到oncreatActivity中 具体方法如下: 需要注意的是import android.support.v4.app.Fragment;导入的这个包 ...
- vue 项目, 通知子组件更新,父组件中每次点击按钮重新加载子组件,(重新生成dom 元素)
vue是组件化开发的项目,很多情况下会把公共组件提取出来,来减少代码量,提高开发效率,和以后更好的可维护性.很多情况下,父组件中都会引用子组件这种情况.通过给在父组件中引用的子组件标签上添加属性,来渲 ...
- vue项目中,点击按钮复制其内容
<el-table-column label="推广链接" align="center"> <template slot-scope=&quo ...
- asp.net中当点击按钮时出现grid编辑弹框
<dx:ASPxButton runat="server" ID="NewGridButton" Text="新增授权" CssCla ...
- jsp 中实现点击按钮 实现页面跳转到HTML
<input type ="button" value="跳转" onclick="window.location.href='main.htm ...
- html网页中 点击按钮页面跳转
在html页面中 实现点击按钮页面跳转.语句如下: <input type="button" value="跳转" onClick="windo ...
- 解决关于 vue项目中 点击按钮路由多了个问号
问题描述: 在vue项目开发过程中,点击按钮结果页面刷新了一遍 后来发现路径变成了 localhost:8080/?#/login 原因: 这里是 form 表单,点击了button 按钮,触发了他的 ...
- 21、解决关于 vue项目中 点击按钮路由多了个问号
在vue项目开发过程中,点击按钮结果页面刷新了一遍 后来发现路径变成了 localhost:8080/?#/login 原因: 这里是 form 表单,点击了button 按钮,触发了他的默认事件,就 ...
- 在Activity中响应ListView内部按钮的点击事件
最近交流群里面有人问到一个问题:如何在Activity中响应ListView内部按钮的点击事件,不要在Adapter中响应? 对于这个问题,我最初给他的解答是,在Adapter中定义一个回调接口,在A ...
随机推荐
- sqoop导数据到hive报错
[root@hadoop1 conf]# sqoop import --connect jdbc:mysql://192.168.122.15:3306/company --username sqoo ...
- HDU 1208 Pascal's Travels 经典 跳格子的方案数 (dp或者记忆化搜索)
Pascal's Travels Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Su ...
- nRF5 SDK for Mesh(六) BLE MESH 的 基础概念
Basic Bluetooth Mesh concepts The Bluetooth Mesh is a profile specification developed and published ...
- EF Core 中多次从数据库查询实体数据,DbContext跟踪实体的情况
使用EF Core时,如果多次从数据库中查询一个表的同一行数据,DbContext中跟踪(track)的实体到底有几个呢?我们下面就分情况讨论下. 数据库 首先我们的数据库中有一个Person表,其建 ...
- js如何将一个json数组对应放置到另一数组中去
需要将上面这个数组的每一个元素对应添加至下面的数组中 最后合成为这样的数组: 使用for循环,将第一个数组中的元素循环到第二个数组中
- Linux系统调用原理
操作系统通过系统调用为运行于其上的进程提供服务. 当用户态进程发起一个系统调用, CPU 将切换到 内核态 并开始执行一个 内核函数 . 内核函数负责响应应用程序的要求,例如操作文件.进行网络通讯或者 ...
- java 网站源码 六套模版 兼容手机平板PC freemaker 静态引擎 在线编辑模版
官网 http://www.fhadmin.org/ 系统介绍: 1.网站后台采用主流的 SSM 框架 jsp JSTL,网站后台采用freemaker静态化模版引擎生成html 2.因为是生成的ht ...
- Java并发编程(四)锁的使用(上)
锁的作用 锁是一种线程同步机制,用于实现互斥,当线程占用一个对象锁的时候,其它线程如果也想使用这个对象锁就需要排队.如果不使用对象锁,不同的线程同时操作一个变量的时候,有可能导致错误.让我们做一个测试 ...
- 将变量做为一个对象的key,push新增进一个数组
var orgnIdListValue=["0","2"]; function arrayField(a,b){ let arrayMes=[]; for(va ...
- 帝国CMS给会员注册加入问答验证
修改文件有e/enews/index.php //注册 elseif($enews=="register") { if($_POST['ask']=='帝国软件') { $user ...