射线检测UGUI的Button组件,控制Button四种状态状态
来源:互联网 发布:淘宝金币大转盘 编辑:程序博客网 时间:2024/05/29 02:34
在VR(HTC VIVE)开发中,经常会使用到手柄发射射线指向VR菜单,菜单因此就有了射线进入、射线停留、射线停留时通过按下手柄扳机键或者其他按键后执行指定事件和射线离开四种状态。以前都是自己写的代码,来模仿Button组件的效果。可是今天一个UI设计师就想UI上面各个子对象都要用到Button组件,就想通过获取Button组件来控制四种状态,查看Button源码,找到了至关重要的一个函数:DoStateTransition(SelectionState.Normal, false);然后取得了控制权。
以下是实现这个功能的父类,继承自Button。
using UnityEngine.UI;public class RayButton : Button{ /// <summary> /// 射线进入(对外接口) /// </summary> public virtual void RayEnter() { DoStateTransition(SelectionState.Highlighted, false); } /// <summary> /// 射线停留(对外接口) /// </summary> public virtual void RayStay() { ResetButtonState(); } /// <summary> /// 射线离开(对外接口) /// </summary> public virtual void RayExit() { DoStateTransition(SelectionState.Normal, false); } /// <summary> /// 射线一直处于进入状态时,可能需要执行的事件 /// </summary> public virtual void TriggerEvent() { DoStateTransition(SelectionState.Pressed, false); } /// <summary> /// 事件完成 /// </summary> public virtual void ResetButtonState() { DoStateTransition(SelectionState.Highlighted, false); }}
父类提供了对外的接口,子类继承时可重写这些方法。通过射线检测获取到射线碰撞对象,然后从碰撞对象上获取RayButton对象,再调用对应的函数即可。
对了,推荐一款工具——ILSpy,用来反编译一般的DLL文件。
下面上一个简单的测试代码:
using UnityEngine;using System.Collections;public class RayButtonTest : RayButton { public override void RayEnter() { base.RayEnter(); } public override void RayStay() { base.RayStay(); } public override void RayExit() { base.RayExit(); } void Update() { if (Input.GetKeyDown(KeyCode.Space)) { RayEnter(); } else if(Input.GetKeyDown(KeyCode.A)) { RayExit(); } }}
阅读全文
1 0
- 射线检测UGUI的Button组件,控制Button四种状态状态
- 动态加载导航树、重写button控制button的状态
- css button 的四种状态 focus 伪类
- button 状态
- 【UGUI】Unity的UGUI实现Button按钮长按状态的判断
- 【UGUI】Unity的UGUI实现Button按钮长按状态的判断
- 【UGUI】Unity的UGUI实现Button按钮长按状态的判断
- button三种点击状态的切换
- 在infoPath2003里用代码控制button的状态
- Qt保持状态的Button
- button按钮的点击状态
- 设置button的禁用状态
- 不同状态下的button
- unity中通过射线用Button控制ui的出现
- Button自定义状态背景
- Button按钮状态选择器
- bootstramp button loading 状态
- button的selected状态的标题
- 并发 阻塞队列
- Android-Activity页面之间的数据传递
- [机器学习入门] 李宏毅机器学习笔记-15 (Unsupervised Learning: Word Embedding;无监督学习:词嵌入)
- oracle 创建job进行submit时提示字符缓冲去太小
- Android中View绘制过程(二) Activity的decorView , Window ,ViewRooImpl 分别什么时候创建
- 射线检测UGUI的Button组件,控制Button四种状态状态
- 1035. Password (20)
- SpringMVC参数接受填坑
- thread47
- 三元表达式和列表解析
- 22. 编写函数:移动字符串中的内容
- SLAM札记
- 0是不是自然数
- Codeforces Round #198 (Div. 2) E. Iahub and Permutations —— 容斥原理