(个人)太极拳学习系统创新实训第八周(二)

本周任务:

完成输出成绩,将二维界面转为三维界面并实现用户通过动作控制射线交互。


我已经完成了输出成绩和将二维界面转换为三维界面,下面我将介绍如何实现用户通过动作控制射线交互。

制作过程:

在二维界面中的界面可以通过鼠标左键的点击实现,鼠标点击可以分解成两部分。

第一部分,鼠标光标移动到目标位置。

第二部分,用户按下左键触发。

在VR状态下,界面是三维界面不能通过鼠标交互。为了解决这个问题我选择使用自定义动作代替左键触发,这个解决方法是基于用户在学习过程中一直穿带诺亦腾设备,通过诺亦腾设备可以捕捉到用户的动作,当识别到用户有右手接触头部的动作就代表用户按下左键。用户可以触发,但是没有光标确定目标位置并不能正常交互。因此我们使用射线来确定用户想要触发的事件。



通过射线代替光标锁定要点击的对象。

首先需要画出射线:

要画出射线首先要得到射线的起点,方向和长度。

在这里头盔的位置就是射线的起点。

(个人)太极拳学习系统创新实训第八周(二)

然后是方向和长度:

(个人)太极拳学习系统创新实训第八周(二)

用加号将两者相加得到的是终点信息:

(个人)太极拳学习系统创新实训第八周(二)

起点的信息也就是头盔的位置:

(个人)太极拳学习系统创新实训第八周(二)


(个人)太极拳学习系统创新实训第八周(二)

调用Line Trace By Channel绘制射线并通过 Channel进行射线查询:

(个人)太极拳学习系统创新实训第八周(二)

获取碰撞结果:

(个人)太极拳学习系统创新实训第八周(二)

存在一个节点里:

(个人)太极拳学习系统创新实训第八周(二)


有了射线确定目标之后还要有触发操作。

在这里我比较右手和头是否有接触,如果有则认为有按下按键事件,将按键事件设为鼠标左键。

(个人)太极拳学习系统创新实训第八周(二)

判断右手是否和头有接触:

(个人)太极拳学习系统创新实训第八周(二)

(个人)太极拳学习系统创新实训第八周(二)

从组件和视图可知,stu_RH为右手,stu_Haed为头。

用On Component Begin Overlap检测左右手的碰撞:

(个人)太极拳学习系统创新实训第八周(二)

判断是否有头部和右手的靠近的动作。


如果有,则触发鼠标左键按下。

(个人)太极拳学习系统创新实训第八周(二)

到现在我已经完成通过用户自身的肢体动作触发按钮。


为了使用户可以清晰的看到射线当前悬浮在那个按钮上,我将所有ui的按钮Hover和Press的按钮背景改为与normal模式下不同的背景。

这样在射线碰撞到按钮,按钮就会产生 hover 的按钮颜色变浅的效果,提示用户射线已经碰撞到按钮,然后用户通过手摸头的动作触发按钮事件,完成触发按钮的全部操作。