在HTC Vive设备上,我们戴着头戴显示器可以在一定的范围内自由走动,在现实中的移动会反映到虚拟世界中,我们称这个范围为“房间”。但是,在我们的游览项目中,虚拟场景里可移动的范围要远远大于房间的大小。那么如何实现在有限的现实空间中游览无限的虚拟空间呢。在很多类似的VR游戏、应用中采用的一个常用方法是传送。在本次我们的项目中,我们也将采用相同的方法。
在Unity中VRTK已经帮助我们封装好了一些常用的传送方法,这里我们来一一查看一下:
基础传送
示例场景
004_CameraRig_BasicTeleport
这个场景展示了基础的传送功能:按下手柄的触摸板按钮将发射一条射线,松开触摸板将立即传送到射线指向的目标位置,但是y坐标值并不改变,也就是水平平面上的传送。
实现方法
首先在场景中创建一个空物体,在上面绑上VRTK_SDK Manager脚本。
如图进行设置。
其中,Script Alias Left/Right Controller
项中所设置的物体分别是作为该空物体的子物体的两个物体。我们将在这两个子物体上绑定控制脚本,将自动映射到对应的左右手柄上,这样更便于管理并且不会破坏[CameraTig]
物体的Prefab链接。
在该物体下再新建一个空物体,命名为PlayArea
,并在上面绑上VRTK_Basic Teleport
脚本。
在LeftController
和RightController
上绑上如下三个脚本
这样设置之后,我们就拥有了基础传送的功能,可以在运行中尝试。
高度调整传送
示例场景
007_CameraRig_HeightAdjustTeleport
这个场景展示了另一种传送功能:按下手柄的触摸板按钮将发射一条射线,松开触摸板将立即传送到射线指向的目标位置,y坐标值贴合目标位置的y坐标值。
实现方法
在PlayArea
上绑定以下三个脚本
其中,如果有物体的Tag被设置为在VRTK_Policy List
中设置的Tag之一的话,那么将无法传送到该物体上。