在unity中要想开发VR项目必须添加SteamVR插件,我们还可以通过VRTK插件,用已有的框架进行VR开发,VRTK必须在SteamVR插件基础上进行开发。本节就是通过VRTK插件中的射线操作,进行人物的位移和对物品的抓取两种行为。
一、搭建VR环境
二、手柄发射射线使人物位移
需要注意的是Enable Teleport这个属性一定要勾选上,否则无法进行射线瞬移功能。Pointer Randerer要选择一种射线,否则就无法看到手柄发射的射线,而Pointer Interaction Settings的两项属性是控制抓取功能的,尤其是Grab To Pointer Tip这属性可以精确到点的抓取。
通过以上的脚本就能确定人物的瞬移功能。按着手柄Touchpad键,手柄会发射一条抛物曲线到地面上,松开按键,人物就能瞬移到目标点。
三、手柄对物体的抓取
通过前边对手柄实现瞬移功能的理解,我们知道了使用手柄的基本操作,就是通过VRTK__ControllerEvents脚本监听按键事件,通过VRTK_Straight Pointer Renderer和VRTK_Pointer两个脚本画出直线射线进行相关的交互功能。
添加VRTK_Interact Grab,VRTK_Interact Touch,VRTK_Interact Use,VRTK_Interact Use_Unity Events等脚本使手柄有抓取功能 。其中的Touch脚本是当手柄接触物体是才能触发。
需要注意的是脚本中的Controller Events属性要添加需要监听的手柄,在Use的Events中添加手柄,选择VRTK_InteractGrab.AttemptGrab方法,这样手柄的抓取功能基本就设置好了,然后在对需要抓取的物品进行设置就能实现手柄抓取物品的功能。
被抓取的物体Cube方块需要添加VRTK_Interactable Object脚本,从而确定手柄的事件能够监听到Cube上。
其中脚本中的Is Grabbable是确定物体能否被抓取,Stay Grabbed On Tele是确定瞬移的时候还能保持抓取物体的状态。而Grab Attach Mechanic和Secondary Grab Action两个属性是通过添加VRTK_Child Of Controller Grab Attach和VRTK_Swap Controller Grab Action两个脚本进行添加的。脚本添加完以后,要想让物体被抓取还有一个重要的地方,就是让物体有碰撞和刚体,否则还是无法进行物体的抓取。
通过按着手柄的Touchpad键,手柄发射一条直射线,当射线射到Cube上,按着Trigger键就能通过射线把Cube抓起来,当手柄接触Cube时,按着Grip可以把Cube直接抓到手柄上,也能实现抓取功能。
四、总结
在VR开发中需要注意的几点就是项目中要有支持VR设备的插件,要能够获取到VR的眼镜和手柄设备,要对设备进行监听事件处理,要明确不同设备需要实现的功能,明白插件自带脚本的运用,便能实现简单的VR开发。