当前位置: 首页 > news >正文

【Unity VR开发】结合VRTK4.0:创建一个按钮(Togglr Button)

语录:

有人感激过你的善良吗,貌似他们只会得寸进尺。


前言:

        Toggle按钮是提供简单空间 UI 选项的另一种方式,在该选项中,按钮将保持其状态,直到再次单击它。这允许按钮处于激活状态或停用状态的情况,通过单击带有对象指针的按钮来切换每个状态。

       Interactions.SpatialButton.ToggleButton使设置变得非常容易。


正文:

步骤一:

       我们需要添加Interactions.SpatialButton.ToggleButton到场景中:

Tilia -> Prefabs -> Interactions -> SpatialButtons -> Interactions.SpatialButton.ToggleButton

 添加完毕之后我们会发现,它与之前创建的Interactions.SpatialButton.ClickButton的组件属性一样,所以我们默认设置就好。如果您现在播放 Unity 场景,您将看到第一次单击带有对象指针的切换按钮会将切换按钮置于活动状态,它将保持活动状态,直到再次单击切换按钮。

 他们的不同之处在于Indicators.SpatialTargets.Target上面的Actions On Activate:

Interactions.SpatialButton.ClickButton->Indicators.SpatialTargets.Target->Actions On Activate->

 Interactions.SpatialButton.ToggleButton->Indicators.SpatialTargets.Target->Actions On Activate->

 他们的区别就在于Interactions.SpatialButton.ClickButton点击之后就会回复到初始状态,Interactions.SpatialButton.ToggleButton点击之后会显示点击后的状态,再进行一次点击才能恢复到初始状态。

步骤二:

      新的模块Interactions.SpatialButton.Group允许我们将场景空间按钮组合在一起,每个组都有自己的空间目标调度程序,这意味着我们可以限制哪些按钮可以控制其他组中其他按钮的状态,甚至让我们控制哪些对象指针可以与这些按钮组交互。

Tilia -> Prefabs -> Interactions -> SpatialButtons -> Interactions.SpatialButton.Group

步骤三:

         我们需要前面创建的Interactions.SpatialButton.ClickButton和Interactions.SpatialButton.ToggleButton放到Interactions.SpatialButton.Group->Buttons下面即可。

步骤四:

       这时我们就不需要前面创建的 Indicators.SpatialTargets.Dispatcher(空间目标处理器),直接删除就可以了,这时,我们的对象指针现在不再设置为使用我们的按钮,因为我们删除了Indicators.SpatialTargets.Dispatcher(空间目标处理器)。我们确实在按钮组上使用了空间目标调度程序,但这意味着我们添加的每个新按钮组都意味着我们需要继续将对象指针事件挂接到每个新按钮组的每个空间目标调度程序。

       这时我们可以简单地设置一次对象指针来调用空间目标处理器,然后我们添加的任何新的空间目标调度程序都可以添加到空间目标处理器列表中:

Tilia -> Prefabs -> Indicators -> SpatialTargets -> Indicators.SpatialTargets.Processor

步骤五:

       然后将游戏对象拖放到组件的属性中的属性值中。

步骤六:

我们现在需要修复对象指针事件,因为以前它们会在我们刚刚删除的空间目标调度程序上使用事件侦听器进行设置,因此现在我们需要将对象指针事件挂接到新添加的空间目标处理器。

 Play:

        运行场景,您会注意到切换按钮的工作方式仍然相同,因此请按键激活对象指针并将光束指向切换按钮,然后按键将切换按钮置于激活状态。使用对象指针再次单击切换按钮将使切换按钮恢复到停用状态。


http://www.lryc.cn/news/38111.html

相关文章:

  • lottie-miniprogram在taro+vue的小程序中怎么使用
  • C++回顾(二十二)—— stack容器 与 queue容器
  • 逻辑优化基础-disjoint support decomposition
  • 保姆级使用PyTorch训练与评估自己的DaViT网络教程
  • Java8新特性:Stream流处理使用总结
  • Java基准测试工具JMH高级使用
  • 问心 | 再看token、session和cookie
  • Ubuntu 安装 CUDA and Cudnn
  • 【漏洞复现】Grafana任意文件读取(CVE-2021-43798)
  • 磨金石教育摄影技能干货分享|春之旅拍
  • 中断以及 PIC可编程中断控制器
  • SecureCRT 安装并绑定ENSP设备终端
  • ESP32设备驱动-TCS3200颜色传感器驱动
  • < JavaScript小技巧:Array构造函数妙用 >
  • 【17】组合逻辑 - VL17/VL19/VL20 用3-8译码器 或 4选1多路选择器 实现逻辑函数
  • 2023年全国最新二级建造师精选真题及答案19
  • Java中的 this 和 super
  • ESP32设备驱动-红外寻迹传感器驱动
  • 初识BFC
  • 随想录二刷Day17——二叉树
  • Weblogic管理控制台未授权远程命令执行漏洞复现(cve-2020-14882/cve-2020-14883)
  • STM32F103CubeMX定时器
  • 多态且原理
  • 动态库(二) 创建动态库
  • opencv加水印
  • Flume基操
  • 图文详解红黑树,还有谁不会?
  • 多目标遗传算法NSGA-II原理详解及算法实现
  • Spark 键值对RDD的操作
  • 【SpringCloud】SpringCloud详解之Feign远程调用