unity中通过射线用Button控制ui的出现
来源:互联网 发布:华为手机usb共享网络 编辑:程序博客网 时间:2024/05/28 15:26
-----如果有什么难解决的问题可以给我留言。
也可以给我发邮件 梦里追梦 252306098@qq.com
很高兴给大家解答unity方面的知识,大家能够
具体实现如下:
首先准备工具:
官方的插件 ---- SteamVR插件
自己创建的东西----------- 一个button (注意这个button带有Box Collider组件,并且要设定好碰撞范围)
一个UI(这个UI,是你要通过上面的Button 来控制它是否出现的)
一个脚本(随意命名为ConrolUI,这个下面有具体的实现方式)
插件处理---------------------拖一个Player预制体(这个预制体 可以在steamvr文件里面找到)
点开Hierarchy---》Player--》Hand1(Han1加上SteamVR_Laser Pointer 和 SteamVR_Tracked Controller 两个脚本)
细节处理:
自己创建的button 给button添加一个tag (名字自己取后面要用到,暂且取名为pointer)注意我的tag是catch ,你改成pointer
SteamVR_Tracked Controller 改Controller Index 改为3
SteamVR_Laser Pointer将Acitve打上 √ ,将Hand1拖进 Houder,
下面是 自己的代码这个脚本要添加到 Hand1上面
using System.Collections;using System.Collections.Generic;using UnityEngine;public class ControlUI : MonoBehaviour {//这两个实际意义是给SteamVR_Laser Pointer 和 SteamVR_Tracked Controller重新起个名字 SteamVR_LaserPointer slp; SteamVR_TrackedController stc;//这个使用来 检测 并接收 射线 射中的物体 ,让它记下button的transform组件,你也可以直接创建成GameObject类型的 Transform pointTransform;//这个UI,是你想要控制它消失与出现的UI (重要 它是public的类型 ---也就意味着--你到时要将场景中的这个UI,拖入到给它赋值的地方) public GameObject menu;///初始化上面的变量void Start () {//注意,注意,这个脚本是要将你的 UI 赢藏掉的语句 menu.SetActive(false);// 得到手柄上的这个脚本,这个脚本可以用来检测 射线的功能 slp = GetComponent<SteamVR_LaserPointer>();//为了 重写SteamVR_LaserPointer 里面的射线检测事件 slp.PointerIn += PointerIn; slp.PointerOut += PointerOut;//用来检测 扳机按钮 事件 stc = GetComponent<SteamVR_TrackedController>(); stc.TriggerClicked += TriggerClicked; stc.TriggerUnclicked += TriggerUnClicked;}//当射线进入一个物体的时候执行 void PointerIn(object sender,PointerEventArgs e) { if(e.target.tag=="pointer") //如果接收到的这个 物体,判断他的tag为pointer(注意这个tag在button上面 也就意味着你指向button才管用) 那么执行 你想要执行的事件 {//首先将这句放在最上面一行,用来保存tag为pointer的物体的组件 pointTransform = e.target;//下面这句就是你要实现的事件//当射线进入button的时候 ,让它出现 当然这句你也可以写在TriggerClicked函数下面,当扳机扣动的时候 实现 // menu.SetActive(true); } }//对偶上面这个函数 ,我就不讲了 void PointerOut(object sender,PointerEventArgs e) { // menu.SetActive(false); pointTransform = null; }//当扳机扣动的时候 你要实现的事件 void TriggerClicked(object sender,ClickedEventArgs e) { if(pointTransform!=null) {//当扳机扣动的 让菜单出现 menu.SetActive(true); } } void TriggerUnClicked(object sender, ClickedEventArgs e) { if(pointTransform!=null) {//当扳机松开的时候,让UI消失 menu.SetActive(false); } }}
注意,扣扳机的时候,要快点扣。不然 响应不了。这是unity自带的一个缺陷。
别忘了 给你自己写的脚本,在外部赋值
阅读全文
0 0
- unity中通过射线用Button控制ui的出现
- unity射线穿透UI的问题解决方案
- Unity通过射线碰撞选择模型,然后控制模型的移动、旋转、缩放等动作
- Unity中通过射线躲避障碍物寻路的一些初步探索
- Unity 2D射线与 3D射线 UI射线
- Unity中射线的用法小结
- 射线检测UGUI的Button组件,控制Button四种状态状态
- unity基础UI-Button
- 在Unity中使用射线
- 【Unity】射线中LayerMask参数的使用方式
- 在unity中有关VRTK的射线使用
- unity中EventSystem射线检测结果的排序规则
- unity中关于射线发射函数的一些解释
- Unity通过射线快速变化物体颜色
- unity中htc vive射线与UI碰撞检测-graphcs.Raycast()
- unity 射线的基础使用方法
- VR开发中HTC手柄发射射线的控制
- unity中通过SVN进行版本控制
- 图论之拓扑排序基础
- 174. Dungeon Game
- RecyclerView设置背景图片长宽一样(以GridLayoutManager为例)
- hystrix构建高可用服务架构
- GCD的基础概念
- unity中通过射线用Button控制ui的出现
- css的初始化
- Ubuntu16.04下编译打包运行MapReduce Hadoop3.0.0-alpha4
- hibernate 查询语句中提示: “xxx”列无效
- 适配器与外观模式
- 4.1(2)
- 继承
- 错误[error] 1366 解决方法
- 利用Lable控件输出九九乘法表