12.4.1 射线功能

12.4.1 射线功能

使用Basic Grabbable组件仅能抓取近处的物体,有时需要在VR应用中直接抓取远处的物体(可以参考“2DDragDrop”等案例场景中的示范),则可以借助于VivePointer等组件实现。

在当前场景中新建一个球体,命名为“FarSphere”;将之前的“Sphere”更名为“NearSphere”。调整FarSphere的Scale属性,使两个球体的大小明显不同,并为其赋予不同的颜色材质,将其位置放在距离ViveRig更远的地方,如图12.15所示。

图12.15 场景俯视图效果

在Project面板中定位到Assets>HTC.UnityPlugin>ViveInput Utility>Prefabs,选择预制体“VivePointers.prefab”拖至Hierarchy面板中,添加射线功能对象。运行场景,按下手柄上的Trigger键即可看到手柄发出射线,对准3D对象时,射线与物体的相交处会有一个小球,如图12.16所示。

图12.16 射线效果

在选中“FarSphere”对象的情况下,在Inspector面板中为其添加“Draggable”脚本组件,如图12.17所示。此脚本让3D物体能够在控制器发出射线指向的情况下被拖拽。

图12.17 “Draggable”脚本组件

运行当前场景,使用手柄对准FarSphere对象,按下Trigger键,即可对其进行拖拽,如图12.18所示。继续为FarSphere对象添加“Throwable”组件,即可实现投掷功能。

图12.18 射线拖拽效果