Unity开发VR——结合VRTK(二)

在这里插入图片描述

上一个章节的链接:Unity开发VR——结合VRTK(一)

这一章节,继续利用VRTK开发VR

该章节介绍了使用VRTK来开发基础的VR功能


手柄射线

射线的发出

1.首先,需要在手柄“LeftController”或“RightController”下添加三个组件(对应的左手柄还是右手柄发射线),分别是:VRTK_Pointer、VRTK_Straight Pointer Renderer、VRTK_Controller Events
在这里插入图片描述
VRTK_Pointer:基于指针的手柄射线
VRTK_Straight Pointer Renderer:渲染手柄指针
VRTK_Controller Events:手柄按键激活的事件,是所有交互的基础

2.为指针添加渲染,在VRTK_Pointer组件下的Pointer Renderer,添加刚刚指定的VRTK_Straight Pointer Renderer组件
在这里插入图片描述
3.运行场景,手柄按下圆盘,即可看到射线的发出
在这里插入图片描述


瞬移

(一)瞬移的初步实现

1.在射线发出的基础上,添加瞬移功能。在VRTK_Script下新建空物体PlayerArea,该物体用来添加玩家的一些属性
在这里插入图片描述
2.在该物体上添加“VRTK_Basic Teleport”组件,这是最传统的瞬移方法
在这里插入图片描述
Blink To Color:瞬移时的瞬间变化颜色
Blink Transition Speed:瞬移时闪屏效果的持续时间
Distance Blink Delay:瞬移时闪屏的延时
HeadsetPositionCompensation:关于瞬移后的位置问题,默认勾选
Target List Policy:瞬移时的策略设置,涉及VRTK_Policy List这个类,后面会说
Nav Mesh Limit Distance:使用Nav Mesh控制瞬移区域的数值

3.有了这些配置,场景瞬移的功能是实现了。但最重要的一点就是,场景中的地面必须添加碰撞体,不然使用不了瞬移功能


(二)瞬移机制

1.最基本的瞬移机制:“VRTK_Basic Teleport”

使用方法:上文有介绍

2.带高度自适应的瞬移机制:“VRTK_HeightAdjustTeleport”

作用:防止瞬移到物体中间(穿透在里面) ,可用于上下楼梯或瞬移到地势高的地方

使用方法:在PlayerArea移除其他瞬移机制组件,添加“VRTK_HeightAdjustTeleport”高度自适应组件。
该组件和“VRTK_Basic Teleport”组件的区别是多了一组HeightAdjustSettings的高度自适应属性
在这里插入图片描述

  • Snap To Nearest Floor:如果勾选了这个选项,那么传送的Y位置将会与楼层下面最近的可用位置对齐,如果不勾选了这个选项,那么传送的Y位置将会在目的地Y位置的任何地方。
  • Layers To Ignore:需要忽略掉的瞬移层级

3.两点之间快速移动并带高度自适应的瞬移机制:“VRTK_DashTeleport”

使用方法:在PlayerArea移除其他瞬移机制组件,添加“VRTK_DashTeleport”组件。
在这里插入图片描述


(三)瞬移限制

1.根据VRTK_Policy List组件限制瞬移区域

①在PlayerArea身上挂载VRTK_Policy List组件,并添加到相应的瞬移机制上的“Target List Policy”属性上。
在这里插入图片描述
在这里插入图片描述
②VRTK_Policy List组件属性介绍
在这里插入图片描述
Operation:选择是忽略掉还是包含在内的
在这里插入图片描述
CheckTypes:检查某一种类型,一般是Tag或者Layer
Size: 数量,可存在多个
Element:输入名称,例如类型是tag,则输入tag的名称

2.根据Navigation导航限制瞬移区域
在这里插入图片描述
Nav Mesh Limit Distance属性,是与场景导航的设置有关。先场景烘焙导航Navigation,Bake一下获取到可导航的区域。前提是可导航的物体要设置为Navigation Static
在这里插入图片描述在这里插入图片描述
然后Nav Mesh Limit Distance属性的值意思是 导航边界往里缩多少米都可以实现瞬移。
在这里插入图片描述

3.根据传送点限制瞬移区域

利用VRTK_Destination Point脚本,可参考传送点预制体DestinationPoint
在这里插入图片描述
传送点预制体身上有defaultCursor、hoverCursor、lockedCursor,分别对应VRTK_Destination Point脚本里的三个属性DefaultCursorObject、HoverCursorObject、LockedCursorObject
在这里插入图片描述.在这里插入图片描述
DefaultCursorObject:传送点默认(可传送)的状态
HoverCursorObject:传送点被指向的状态
LockedCursorObject:传送点被锁定(不可传送)的状态

扩展:也可将传送点修改为传送区域,记得需要添加碰撞体


(四)瞬移的三种方法

1.直线

可往上查看 瞬移的初步实现 的方法

2.贝塞尔曲线

①贝塞尔曲线是经常需要用到的,实现的方法VRTK已经写好了。以下是配置步骤:
在手柄控制器物体身上挂载VRTK_BezierPointerRenderer组件,并且在VRTK_Pointer组件中的PointerRenderer属性上添加进去
在这里插入图片描述
在这里插入图片描述
这样就可以实现贝塞尔曲线的瞬移。

②要使指针末端始终与指到的物体表面垂直,即避免在不规则的地面上指针有穿透问题,需要勾选上Cursor Match Target Rotation
在这里插入图片描述
3.触摸板滑动行走

使用触摸板代替射线行走,操作步骤:
①手柄控制器下添加空物体,这里命名为TouchpadControlOptions
在这里插入图片描述
②在TouchpadControlOptions物体身上挂载两个组件VRTK_Slide Object Control Action
③两个组件的属性栏Listen On Axis Change分别设置为监听X与Y轴
④在手柄控制器Left/Right Controller上添加VRTK_Touchpad Control
在这里插入图片描述
⑤将ObjectControlScript属性赋值当前所在的手柄控制器Left/Right Controller
在这里插入图片描述


(五)自定义瞬移指针

下面以贝塞尔曲线为例:
在这里插入图片描述
Cursor:指针与碰撞体交界的光标
Tracer:构成曲线的元素,默认是几个小球形成点状曲线

  • Valid Collision Color:可使用时显示的颜色
  • Invalid Collision Color:不可使用时显示的颜色
  • Tracer Visibility:路径元素可见性(被激活时、总是激活、总是不激活)
  • Cursor Visibility:光标可见性(被激活时、总是激活、总是不激活)
  • Tracer Density:路径元素密度
  • Cursor Radius:光标半径
  • Rescale Tracer:根据曲线长短自动缩放路径
  • Custom Cursor:自定义光标
  • Custom Tracer:自定义路径元素

①更换射线的路径元素以及光标,需要在Custom Cursor和Custom Tracer两个属性栏上添加需要替换成的其他模型即可,其他配置根据实际内容自我调整好即可。

②附上自行修改将路径修改为连续直线的方法:
I.新建一个空物体,添加上LineRenderer组件
II.将Width属性值修改为0.01
III.取消勾选Use World Space

在这里插入图片描述
IV.展开Position属性,将下面的1改为2
在这里插入图片描述

V.将制作好的”线”添加到Custom Tracer属性中即可
在这里插入图片描述

VI.若颜色依旧是洋红色(上色失败),在LineRenderer上给个材质球就行
在这里插入图片描述

③路径元素也可以使用带动画的模型,VRTK里面也有个可作为动态路径的动画预制体,可以尝试使用
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_33795300/article/details/111316882
今日推荐