VR开发之使用VRTK实现拾取和手柄扣下扳机触发事件(Unity灭火器灭火功能的实现)

unity毕设之消防演练灭火功能的实现

主要使用VRTK实现手柄拾取灭火器,然后扣下手柄扳机喷射粒子系统灭火的一个过程
主要学习了VRTK里面【021_Controller_CustomObjectsWithJoints】:该场景演示了如何抓取、使用带关节的可交互对象。
VRTK simulator使用说明:
在这里插入图片描述所有的按键映射可以在SDK_InputSimulator中找到也可以修改成自己习惯的按键触发。

导入灭火器模型和喷射效果粒子系统

调整大小角度,查看喷射效果:
在这里插入图片描述

为被拾取的物体添加组件【VRTK_Interactable Object】组件:

点选被拾取的物体,依次点开选择菜单【Windows】—>【VRTK】—>【Setup Interactable Object】,在弹出的对话框,勾选Hold Button to Grab,点击下方setup selected object按钮,这样,灭火器就添加上了相关组件,使它能成为,Touch Hightlight color可设置被拾取时高亮的颜色。
为被拾取的物体添加刚体组件【Rigibody】和碰撞器(被拾取的必要条件)
在这里插入图片描述

在这里插入图片描述
至于添加什么碰撞器视物体的形状自行决定,调整碰撞器范围。

为左右控制器添加可拾取物体的组件

【VRTK_Interact Touch】(手柄可触摸物体)
【VRTK_Interact Grab】(手柄可抓取物体)
【VRTK_Controller Events】(前面以添加)
在这里插入图片描述
Grab Button设置拾取的按键,默认是手柄的侧键。
模拟器测试一下:按alt切换到右手模式下,移动位置到灭火器附近,按ctrl调整手柄上下高度,触摸到灭火器高亮
在这里插入图片描述
按住鼠标左键可拾取灭火器并可移动它:
在这里插入图片描述

利用粒子碰撞实现灭火交互功能

这里的灭火原理是:根据灭火器喷射粒子在一定时间内与火焰对象发生碰撞的累计次数更新火焰对象的灭火系数,用户喷得越准则灭火系数越大,只要灭火系数大于恢复系数,即可使火势变小。
这里提供一个思路:当灭火器喷射出的灭火粒子与火焰对象“fire”的碰撞器发生碰撞时,会触发粒子碰撞事件,可以在碰撞事件的回调函数中统计本次事件中与火焰对象发生碰撞的粒子数量,并将该数量传递给火焰对象的“fireControl”脚本,为此修改
在这里插入图片描述
为其添加接收粒子碰撞数量的函数,在该函数中根据一定时间内粒子碰撞累计数量计算出熄灭系数的最新值,同时,每隔一定时间清空粒子碰撞累计数和熄灭系数。
为fireControl类添加相关变量:
在这里插入图片描述
添加供发生粒子碰撞时可以调用的公开函数:
在这里插入图片描述
添加用于指定时间内清空粒子碰撞计数以及灭火系数的协程函数:
在这里插入图片描述
协程函数ResetPCC()放在start函数里启动。
在这里插入图片描述
创建粒子碰撞脚本类ParticleCollision并加载到喷射粒子对象上:
在这里插入图片描述
!!!(注意:需要将喷射粒子对象上的“ParticleSystem”组件中的“Type”设置为World,"Send Collison Message"属性设置为“true”(勾选状态)),因为是3d世界下,所有这是粒子碰撞触发的必要条件,不设置的话,粒子无法碰撞触发相关事件!!!
在这里插入图片描述

基于VRTK下监听手柄按钮事件:

新建脚本,基于VRTK的侧键按下,扳机键按下事件
在这里插入图片描述
在这里插入图片描述
挂载到右手柄上:
在这里插入图片描述
拖拽喷射粒子和喷射音效给组件。
好了,基本完成了,测试一下看:
在这里插入图片描述

模拟器状态下,键盘上按ctrl调整手柄位置触碰到灭火器,按鼠标左键拾取,鼠标右键发射灭火粒子,对准火势喷射即可灭火成功。
在这里插入图片描述
没有设备模拟器调试不好截图,但在控制台可以看到,粒子在不断发生碰撞,火势慢慢变小直至熄灭。
ok!

猜你喜欢

转载自blog.csdn.net/qq_42437783/article/details/115705905