本周任务:
完成输出成绩,将二维界面转为三维界面并实现用户通过动作控制射线交互。
我已经完成了输出成绩和将二维界面转换为三维界面,下面我将介绍如何实现用户通过动作控制射线交互。
制作过程:
在二维界面中的界面可以通过鼠标左键的点击实现,鼠标点击可以分解成两部分。
第一部分,鼠标光标移动到目标位置。
第二部分,用户按下左键触发。
在VR状态下,界面是三维界面不能通过鼠标交互。为了解决这个问题我选择使用自定义动作代替左键触发,这个解决方法是基于用户在学习过程中一直穿带诺亦腾设备,通过诺亦腾设备可以捕捉到用户的动作,当识别到用户有右手接触头部的动作就代表用户按下左键。用户可以触发,但是没有光标确定目标位置并不能正常交互。因此我们使用射线来确定用户想要触发的事件。
通过射线代替光标锁定要点击的对象。
首先需要画出射线:
要画出射线首先要得到射线的起点,方向和长度。
在这里头盔的位置就是射线的起点。
然后是方向和长度:
用加号将两者相加得到的是终点信息:
起点的信息也就是头盔的位置:
调用Line Trace By Channel绘制射线并通过 Channel进行射线查询:
获取碰撞结果:
存在一个节点里:
有了射线确定目标之后还要有触发操作。
在这里我比较右手和头是否有接触,如果有则认为有按下按键事件,将按键事件设为鼠标左键。
判断右手是否和头有接触:
从组件和视图可知,stu_RH为右手,stu_Haed为头。
用On Component Begin Overlap检测左右手的碰撞:
判断是否有头部和右手的靠近的动作。
如果有,则触发鼠标左键按下。
到现在我已经完成通过用户自身的肢体动作触发按钮。
为了使用户可以清晰的看到射线当前悬浮在那个按钮上,我将所有ui的按钮Hover和Press的按钮背景改为与normal模式下不同的背景。
这样在射线碰撞到按钮,按钮就会产生 hover 的按钮颜色变浅的效果,提示用户射线已经碰撞到按钮,然后用户通过手摸头的动作触发按钮事件,完成触发按钮的全部操作。