Unity中关于VRTK的射线使用
发表于2018-04-25
在unity中要想开发VR项目必须添加SteamVR插件,我们还可以通过VRTK插件,用已有的框架进行VR开发,VRTK必须在SteamVR插件基础上进行开发。本篇文章就是通过VRTK插件中的射线操作,进行人物的位移和对物品的抓取两种行为。
一、搭建VR环境
在unity的AssetStore上下载SteamVR和VRTK两个插件,创建一个新场景,新建一些物体用来场景搭建。
其中Plane是地面,VRTK_Setup,SteamVR为空物体,负责添加支持VR的脚本框架,CameraRig在SteamVR插件文件夹中的Prefabs文件夹中。Player也是一个空物体里面负责添加VR设备中有关眼镜和手柄的脚本,其中eye是眼镜相关的,left和right分别为左右手柄。
VRTK_SetUp添加脚本VRTK_SDK Manager
需要注意的是脚本中的Left Controller和Right Controller里面添加的是Player中的left和right,如果没有添加就无法检测到手柄的操作。Setups中需要添加SteamVR。
物体SteamVR添加脚本VRTK_SDK Setup
需要注意的是Quick Select需要选择SteamVR,否则无法应用VR设备。然后直接把预制体CameraRig添加到里面。
这样VR的环境就搭建好了可以直接运行程序通过HTCVive进行VR操作。
二、手柄发射射线使人物位移
首先要在Player中的eye物体中添加脚本VRTK_Basic Teleport,这个脚本是控制人物位移的基础脚本。
然后我们需要在左手柄控制器上画射线,VR中由于没有直接控制人物移动的方法,一般情况下都是通过射线指向地面的不同地方,使人物通过瞬移到射线射到地面的点来进行移动。
对物体添加VRTK_ControllerEvents脚本,这个脚本是监听手柄的按键。
添加VRTK_Bezier Pointer Renderer脚本,这是画曲线射线的脚本,一般通过曲线射线在地上的接触点来确定人物移动的位置,而VRTK_Straight Pointer Renderer脚本是画直线射线的脚本,也可以用来确定人物位移的位置,不过通常把直线射线用来进行交互事件,而用曲线来进行位移。
添加VRTK_Pointer脚本,这个脚本可以让手柄发射射线,通过与前一个画射线的脚本进行结合来实现手柄发射射线功能。
需要注意的是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开发。
来自:https://blog.csdn.net/qq_31791999/article/details/77715371