当前位置: 首页 > 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…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...