Steam VR Unity VRTK Examples 1 简单指针与传送

VRTK是个很好用的使用Unity开发Steam VR的工具集,感谢开发者团队在其中做了很多非常棒的工作。其官方文档对插件中的Scripts、Prefabs都做了很详细的介绍。对于插件中的所有例子,官方还做了视频放在了Youtube上。美中不足的是,对每个示例场景的分析不是很详细,这里对每个示例场景做一个比较详细的剖析,一遍掌握其中的用法。先做一下搬运工,以官方文档的内容开头:

欢迎来到VRTK

这个工具包提供了很多在Unity3d做VR开发中通用的VR功能,主要包括:

具有别名的控制器按钮事件

控制世界指针(激光指针)

玩家瞬间转移

使用控制器抓起/握住物体

使用控制器与物体交互

把游戏物体变成交互式的UI元素

这里有什么

这个工具集主要分成三个部分:

Prefabs - VRTK/Prefabs/

Scripts - VRTK/Scripts/

Examples - VRTK/Examples/

所有相关的文件都存放在VRTK这个文件夹里面,这个文件夹可以拷贝到现有工程中。Examples文件夹包含了该工具集中的示例场景。

从这里开始

克隆这个代码库 git clonehttps://github.com/thestonefox/SteamVR_Unity_Toolkit.git

使用Unity3d打开SteamVR_Unity_Toolkit

从Unity Asset Store下载并导入SteamVR插件

浏览Examples中的场景可以查看脚本的示例用法

示例分析

Examples文件夹包含了所有的示例场景,用来说明脚本和prefab的用法。该文件夹中还有一个/Resources/Scripts文件夹,其中包含了示例场景中实现特定功能使用的帮助脚本,例如事件监听器。这些脚本在实际项目中没必要用。

下面开始进入主题:

001_CameraRig_VR_PlayArea 相机配件与VR游戏区域

这个简单的场景说明了[CameraRig]Prefab的用法。(官方解释到此为止)

这个Prefab是SteamVR自带的,位于SteamVR文件夹下面的Prefabs中。建好场景之后,直接加到场景中,无需其他操作。运行程序之后,从头盔中就可以看到两个控制器手柄。无须赘述。

[CameraRig]Prefab的结构如下图,很好理解,一个头盔,两个手柄,可以分出左右手。

Steam VR Unity VRTK Examples 1 简单指针与传送_第1张图片

CameraRig

002_Controller_Events 控制器事件

这个简单的场景展示了在控制台中输出控制器的事件。(官方解释到此为止)

这个场景给控制手柄添加了VRTK_ControllerEvents脚本,如下图所示。

Steam VR Unity VRTK Examples 1 简单指针与传送_第2张图片

ControllerEvents

下面详细的来看一下VRTK_ControllerEvents这个类的介绍。

VRTK_ControllerEvents这个脚本处理了游戏控制器发出的事件。该脚本应该添加到[CameraRig]预制体下面的控制器对象上,并且对外提供了事件处理监听器。因为系统菜单按钮的行为是由Steam平台使用的,它不能被覆盖,所以不提供这个按钮的事件监听。

当按下一个控制器上的按钮,这个脚本发出一个指示该按钮被按下的事件,允许其他脚本进行事件监听该事件,不用实现任何控制器逻辑。同样的,当释放一个按钮的时候,该脚本也会发出一个按钮被释放的事件。

该脚本还为按钮定义了一个公共布尔型按钮按下状态,允许其他脚本来查询一个按钮是否被按住了。

关于变量、事件的详细介绍,看这里。

VRTK_ControllerEvents_ListenerExample这个类示范了如何绑定事件输出事件参数等内容。

003_Controller_SimplePointer 控制器简单指针

该场景展示了,按下控制器上的触摸板(Touchpad),发射一道光束指向场景中的物体。控制台中显示了指针(pointer)事件。(官方解释到此为止)

简单指针(SimplePointer)从控制器的顶端发出一道有颜色的光束,以此来模拟激光束。在场景中指向物体的时候非常有用,同时它也能确定它正指向的物体,以及物体和控制器之间的距离。

按下控制器上的触摸板可以激活激光束。该脚本监听的事件是AliasPointer事件,可以改变VRTK_ControllerEvents脚本上的Pointer Toggle button参数来设置指针开关按钮。

Steam VR Unity VRTK Examples 1 简单指针与传送_第3张图片

SimplePointer

该脚本能够添加到[CameraRig]Prefab下面的控制器对象上面,并且要求控制器对象同时具有VRTK_ControllerEvents脚本,因为它使用这个脚本监听控制器按钮事件,通过事件来开关激光束。该脚本也可以添加到其他对象上,比如[CameraRig]/Camera (head),从而允许其他物体投射光线。这种情况下,控制器这个参数赋值,它用于开关光束。

具体的事件绑定和事件参数等用法,请参考VRTK_ControllerPointerEvents_ListenerExample这个脚本。其中事件参数DestinationMarkerEventArgs类中包含了丰富的内容。

Steam VR Unity VRTK Examples 1 简单指针与传送_第4张图片

DestinationMarkerEventArgs

004_CameraRig_BasicTeleport 基本的传送功能

该场景中有一些基本的几何体,用户可以按下控制器上触摸板,发出一条光束指向游戏世界中的一个物体。当用户松开触摸板的时候,用户就被传送(teleport)到了光束终点位置。(官方解释到此为止)

该场景中在[CameraRig]预制体上添加了VRTK_BasicTeleport脚本。VRTK_BasicTeleport脚本实现了基本的传送功能,该脚本把[CameraRig]Prefab在游戏世界的x/z位置更新到了世界指针指向的位置,是在WorldPointerDestinationSet这个事件中设置。因为VRTK_BasicTeleport不会改变y方向的位置,所以它不能用于上下移动物体,只允许在一个平面上传送。

VRTK_BasicTeleport脚本添加到[CameraRig]Prefab上,并且还要把WorldPointer脚本的一个具体实现添加到其他的物体上。比如,把VRTK_SimplePointer添加到控制器对象上。(之所以这样说,是因为WorldPointer是个抽象类,VRTK_SimplePointer和VRTK_BezierPointer是它的具体实现。)VRTK_BasicTeleport脚本还定义传送中和传送结束两个事件。除此之外,还有场景闪烁的速度等变量。

具体的VRTK_BasicTeleport类的信息可以参考这里https://vrtoolkit.readme.io/docs/vrtk_basicteleport

期待下一篇!

参考:

https://vrtoolkit.readme.io/docs/examples

你可能感兴趣的:(Steam VR Unity VRTK Examples 1 简单指针与传送)