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

【Unity VR开发】结合VRTK4.0:创建物理按钮

语录:

如今我努力奔跑,不过是为了追上那个曾经被寄予厚望的自己


前言:

使用线性关节驱动器和碰撞体从动器可以轻松创建基于物理的按钮,以使交互者能够在物理上按下按钮控件,然后挂钩到驱动器事件中以了解按钮何时被按下或释放。


学习时间:

步骤一:

       如果我们需要实现物理按钮的效果,那我们首先需要有一个碰撞器,并跟随我们的游戏对象,而且还能与物理进行交互。一个有用的例子是能够用交互器推动可交互的对象,而不必抓住它。这时我们就用到了模块:Trackers.ColliderFollower

Tilia -> Prefabs -> Trackers -> Trackers.ColliderFollower

 步骤二:

        我们让我们的碰撞器跟随我们右边的手柄,我们就需要将手柄拖放到碰撞器的组件参数上:

 步骤三:

      我们需要修改碰撞 体跟随者的碰撞体与交互器的形状相匹配。将自身带的球形碰撞器隐藏,然后添加盒子碰撞器,然后修改他的属性:

 这里我们已经完成了碰撞体跟随器的添加,接下来我们就要进行物理按钮的创建。

步骤四:

       首先我们需要创建一个空物体,并将其重命名:

步骤五:

      接下来在我们的空物体下创建我们的Interactions.LinearJointDrive模块 :

Tilia -> Prefabs -> Interactions -> Controllables -> PhysicsJoint -> Interactions.LinearJointDrive

我们会发现,他自带的Cube非常大,不利于我们使用,我们需要找到它下面的Cube然后修改他的基本参数,以供我们使用:

 接着我们就要修改Interactions.LinearJointDrive自带组件的属性:

 步骤六:

       创建一个新的空物体,使它成为游戏对象空物体的子物体,然后重新命名,并添加一个触发器,修改它的属性:

步骤七:

       再在ActivationArea添加组件“Collision Tracker”。然后将游戏对象“Trackers.ColliderFollower”拖放到组件中的开始和结束事件侦听器中,并设置对应的事件:

步骤八:

      同样,将游戏对象拖放到事件侦听器框中, 选择要在发出事件时执行的函数:

 步骤九:

        创建一个新的空物体,使其成为ButtonContainer的子物体,并重新命名然后在其身上添加组件“Any Component Type Rule”:

 步骤十:

        在ValidCollisions下创建一个新的空物体,重新命名再添加组件“Serializable Type Component Observable List”:

 选择游戏对象,然后在组件上增加属性。

 设置属性为:InteractorFacade

 然后将ValidList拖放到ValidCollisions的组件上:

 接着,我们将ValidCollisions拖放到ActivationArea的组件属性上:

       运行场景,您会注意到,当您按下按钮上的右控制器时,它会将其向下移动到最大点,然后松开它会将其移回原始位置。但是,我们的左控制器似乎根本不与按钮交互。

步骤十一:

       我们先将Trackers.ColliderFollower重新命名为:Right.ColliderFollower,然后再讲Right.ColliderFollower复制一个,命名为:Left.ColliderFollower:

接着我们更改 Left.ColliderFollower的属性值:

这样我们的左右手柄都能检测到碰撞。 现在,让我们根据实际接触激活区域的控制器别名正确启用和禁用正确的碰撞体从属。为此,我们将使用一些检测,这些检测使我们能够知道哪个控制器别名正在接触激活区域,并能够为每个控制器触发一些特定的逻辑。

步骤十二:

在ButtonContainer创建新的游戏对象,并重命名InteractorRules,然后再新建的有的对象下面创建一个新的游戏对性作为他的子物体,然后命名为IsLeftInteractor,最后在IsLeftInteractor上面添加组件List Contains Rule:

 接着我们继续在IsLeftInteractor下面创建一个新的空物体作为它自身的子物体,并添加组件Unity Object Observable List:

 将CameraRigs.TrackedAlias -> Aliases -> LeftControllerAlias -> Interactions.Interactor拖放到组件属性中新创建的属性值中:

 接着我们将ObjectList拖放到IsLeftInteractor上面的Objects属性中:

 这样,就可以帮助我们确定给定的游戏对象是否为左控制器交互者。同理我们也要对右控制器做同样的事情,将IsLeftInteractor复制一个,重命名为IsRightInteractor:

 将CameraRigs.TrackedAlias -> Aliases -> LeftControllerAlias -> Interactions.Interactor拖放替换到组件属性值中:

 步骤十三:

         现在我们需要添加一些逻辑来弄清楚我们想要如何处理特定的交互器冲突。

         在InteractorRules下面创建一个新的空物体,对其进行重命名(CollisionStopped),然后我们在它身上添加组件Notifier Container ExtractorRules Matcher

         接着我们在CollisionStopped下面创建一个新的空物体,作为它的子物体,将其重新命名并添加对应的组件Rules Matcher Element Observable List:

 我们将IsRightInteractor和IsLeftInteractor拖放到组件的属性中:

 接着我们将RuleMatcherList拖放至他的父物体的属性中:

      我们现在需要连接我们的碰撞交互器以传递给我们,以确定根据正在碰撞的控制器运行什么逻辑。事件数据包含此信息,但我们需要提取我们感兴趣的碰撞信息。这就是组件将为我们做的事情。

步骤十四:

        首先我们要把前面ActivationArea上面设置的Collision Stopped监听事件删除:

        然后将 CollisionStopped拖放到ActivationArea上面设置的Collision Stopped监听事件中,并选择要在发出事件时执行的函数:

我们现在只需要告诉我们将提取的冲突游戏对象传递给我们的组件。将 CollisionStopped拖放到自身属性上,并选择要在发出事件时执行的函数:

同样的,我们需要设置开始触发时的时间监控,这是,我们只需要将 CollisionStopped复制一份,然后更名为CollisionStarted:

 然后我们要把前面ActivationArea上面设置的Collision Started监听事件删除,将CollisionStarted拖放到Collision Started监听事件上,并设置对应的属性:

 步骤十五:

         接下来我们需要设置CollisionStarted和CollisionStopped上面的Rules Matcher属性,该属性是为我们的控制器交互器设置的,因此我们希望将游戏对象拖放到事件侦听器框中,该框显示在显示 的组件上的事件参数上。游戏对象上的组件现在应按如下方式设置:

 步骤十六:

最后呢,我们要在事件执行前对游戏对象上的组件进行设置:

到这里,我们的设置就完成,接下来我们运行,您会注意到,当您使用任一控制器按下按钮时,按钮会向下移动到其最大点,然后松开按钮将其移回原始位置。您还会注意到,根据触摸控制器的不同,正确的碰撞体从动器已启用。

相关文章:

【Unity VR开发】结合VRTK4.0:创建物理按钮

语录: 如今我努力奔跑,不过是为了追上那个曾经被寄予厚望的自己 前言: 使用线性关节驱动器和碰撞体从动器可以轻松创建基于物理的按钮,以使交互者能够在物理上按下按钮控件,然后挂钩到驱动器事件中以了解按钮何时被按…...

【软件测试】web自动化测试如何开展合适?自动化测试用例如何设计?资深测试的总结......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 首先,还…...

ARouter::Compiler The user has configuration the module name, it was

学习组件化使用的是阿里的ARouter,我是照着案例敲的,在编译的时候报了这么一个错。 我查了好多资料,大部分都是说build.gradle 配置出现了问题,比如没有配置 javaCompileOptions {annotationProcessorOptions {arguments [AROUTE…...

Jmeter(GUI模式)详细教程

Jmeter(GUI模式)详细教程 目录:导读 一、安装Jmeter 二、Jmeter工作原理 三、Jmeter操作步骤 Jmeter界面 1、测试计划 2、线程组 3、HTTP请求 4、监听器 四、压力测试 写在最后 前些天,领导让我做接口的压力测试。What…...

2023年CDGA考试-第14章-大数据和数据科学(含答案)

2023年CDGA考试-第14章-大数据和数据科学(含答案) 单选题 1.MapReduce模型有三个主要步骤 () A.剖析、关联、聚类 B.提取、转换、加载 C.映射、修正、转换 D.映射、洗牌、归并 答案 D 2.以下哪种技术已经成为面向数据科学的大数据集分析标准平台。 A.MPP技术。 B.Hado…...

【阿旭机器学习实战】【36】糖尿病预测---决策树建模及其可视化

【阿旭机器学习实战】系列文章主要介绍机器学习的各种算法模型及其实战案例,欢迎点赞,关注共同学习交流。 【阿旭机器学习实战】【36】糖尿病预测—决策树建模及其可视化 目录【阿旭机器学习实战】【36】糖尿病预测---决策树建模及其可视化1. 导入数据并…...

简易黑客初级教程:黑客技术,分享教学

第一节,伸展运动。这节操我们要准备道具,俗话说:“工欲善其事,必先利其器”(是这样吗?哎!文化低……)说得有道理,我们要学习黑客技术,一点必要的工具必不可少。 1,一台属于自己的可以上网的电…...

日本公派访问学者的具体申请流程

公派日本访问学者的具体申请流程,知识人网整理了相关的资料以供大家参考。第一、申请材料一般申请CSC日本访问学者,截止日是每年的1月15号左右,但是学院在1月10号之前就审查材料了。材料包括:CSC网页的报名表,教授邀请…...

投票点赞链接制作投票链接在线制作投票图文链接制作点赞

用户在使用微信投票的时候,需要功能齐全,又快捷方便的投票小程序。而“活动星投票”这款软件使用非常的方便,用户可以随时使用手机微信小程序获得线上投票服务,很多用户都很喜欢“活动星投票”这款软件。“活动星投票”小程序在使…...

PHY设备驱动

1. 概述 MAC控制器的驱动使用的是platform总线的连接方式,PHY设备驱动是基于device、driver、bus的连接方式。 其驱动涉及如下几个重要部分: 总线 - sturct mii_bus (mii stand for media independent interface) 设备 - struct phy_device 驱动 - struc…...

Linux——UDP协议与相关套接字编程

一.概念在网络通信中,传输层中最常用的通信协议有两个:TCP协议与UDP协议。这两种协议虽然都可以用于网络通信,但是通信方式不同决定了应用场景的不同。与TCP协议相比,UDP协议最具特色的不同点有两个:无连接与面向数据报…...

EM算法 简明理解

E:Expection,期望步,利用估计的参数,来确定未知因变量的概率,并利用其来计算期望值。 M:Maximization,最大化,使用最大似然法更新参数值,使E步中期望值出现的概率最大。…...

论坛项目小程序和h5登录

项目中安装uview出现npm安装uview 直接报错:创建一个package.json配置文件在进行安装。cmd到项目。初始化一个package.json文件(vue项目的配置文件) npm init --yes 安装uview项目点击关注进入管页面,需要验证用户是否登录查用户是…...

kubernetes集群pod中的pause容器作用

kubernetes集群pod中的pause容器作用 我们搭建完集群了以后,可以使用最简单的方式创建一个pod,随意你建立什么pod,去访问相应node上执行docker ps 就会看到有一种pause容器,但是你可能从来没有启用 etrics-scraper_dashboard-me…...

【2.24】malloc()分配内存、MySQL事务、项目、动态规划

malloc是如何分配内存的? 在 Linux 操作系统中,虚拟地址空间的内部又被分为内核空间和用户空间两部分,不同位数的系统,地址空间的范围也不同。比如最常见的 32 位和 64 位系统,如下所示: 内核空间与用户空…...

Unity——使用铰链关节制作悬挂物体效果

目的在场景中创建一个悬挂的物体,是把多个模型悬挂在一起可以自由摇摆,类似链条的效果效果图前言什么是铰链关节?铰链关节 将两个刚体(Rigid body)组会在一起,从而将其约束为如同通过铰链连接一样进行移动。…...

plsql过程语言之uxdb与oracle语法差异

序号场景uxdboracle1在存储过程中使用goto子句create or replace procedure uxdbc_oracle_extension_plsql_goto_0001_procedure01(t1 int) language plsql as $$ begin if t1%20 then goto even_number; else goto odd_number; end if; <<even_number>> raise…...

file_get_contents 打开本地文件报错: failed to open stream: No such file or directory

php 使用file_get_contents时报错 failed to open stream: No such file or directory (打开流失败&#xff0c;没有这样的文件或目录) 1. 首先确保文件路径没问题 最好是直接复制一下文件的路径 2. windows电脑可以右键该文件 → 属性→安全 →对象名称 选中后复制一下 3. 然后…...

Candence allegro 创建等长的方法

随着源同步时序电路的发展,越来越多的并行总线开始采用这种时序控制电路,最典型的代表当属目前炙手可热的DDRx系列。下图这种点到点结构的同步信号,对于攻城狮来说,设置等长约束就非常easy了图片。 But,对于有4、6、8、、、等多颗DDR芯片的ACC同步信号来说,要设置等长约束…...

使用Python批量修改文件名称

下载了一些图片&#xff0c;想要更改其文件的名称。 试了许多方法&#xff0c;都不太理想。 于是想到了使用Python来实现。 需要用到的模块及函数&#xff1a; import osrename() 函数用于改变文件或文件夹的名称。它接受两个参数&#xff1a;原文件名和新文件名。 os.rena…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...