上两节中,我们主要对SteamVR_Unity_Toolkit(简称旧版VRTK)中的一些基础控制器脚本进行了学习,包括VRTK_ControllerEvents(以下简写会经常省略VRTK_前缀)、SimplePointer和BasicTeleport三个主要脚本。但是最近查资料的时候发现其实VRTK早已更新了功能更强大的版本。在新的VRTK中,不仅更多的VR环境被支持,而且相比旧版本还扩展了更多工具,其中就有很重要的UI模块。这节我们就来体验新版本的VRTK,并且如果不出意外的话,今后的学习也将主要集中于新版本。
配置环境
首先,配置环境。教程上已经写得很清楚了,还有youtube视频可以参考:
(1)https://www.youtube.com/watch?v=tyFV9oBReqg&t=7s
(2)https://github.com/thestonefox/VRTK/blob/master/Assets/VRTK/Documentation/GETTING_STARTED.md
很容易操作,然后我们正式开搞。
基于旧版SDK的代码移植
首先针对之前两节的控制器基本功能进行复现,看看有哪些区别。关键的是VRTK_ControllerEvents和VRTK_SimplePointer脚本,后者在VRTK新版本中,它被拆成了两个分开的模块:处理指针事件的VRTK_Pointer;和处理指针渲染(形状:Bezier和Straight两种)的PointerRender脚本。经过简单观察,原来的ControllerEvents和DestinationMarker事件均未被改变,而且增加了一些其它事件供使用。初步看来,移植基于旧版SDK的代码应该没有太大问题,无需太多修改。
仔细尝试了一下发现还是有一些区别的。事实上,VRTK是一个面向很多设备的通用SDK,那么就不肯能像之前我们用的一样仅支持Vive设备。我们可以从ControllerEvents中发现,有很多我们不熟悉的按键,比如Vive设备的ApplicationMenu按键没有了,却多了ButtonOne和ButtonTwo两个键(后来尝试发现后者就是原来的ApplicationMenu),这便是试图去抽象带来的区别。另外一个很大的区别是,原来Pointer的DestiantionMarkerSet事件紧跟DestinationMarkerOut事件发发布,因此只需对着目标搬动一下即可选中目标;而新的VRTK又设置了一个SelectionButton属性,来增加选择控制(发出射线的控制属性被改为Activation),这两个属性的设置从操作友好角度显然应该设置成一个按键比较好,比如:前者设置成TriggerPressed,后者设置成TriggerClicked。这样,当我们想要选择一个对象时,需要“狠狠地click”这个Trigger;当我们不想选中而仅仅想看看什么情况时,我们只要“轻轻press”一下就好。
这样看来,新版本的VRTK和之前的SteamVR版本还是区别很多的。其实使用上也有区别,我们会在之后继续探究。
最后推荐一下Youtube上的教学视频,相比于总是看document,作者发布的教学视频还是让我轻松了不少(片头的音乐配上VRTK飞猪logo也是非常逗比
)。