文章目录
1 创建 OVRCameraRig
(1)新建 3D 项目,将场景中的 Camera 删除,并从 Project 窗口中的 Packages 找到 OVRCameraRig,拖拽进场景中。

此时该物体即为角色物体。此时运行项目,只有追踪功能,没有手部模型,也没有交互功能。
(2)将 OVRCameraRig 上的 OVRManager 脚本中的 Tracking Origin Type 更改为 “Floor Level”。

2 添加交互
(1)在 Project 窗口中的 Packages 找到 OVRInteraction,将其拖拽为 OVRCameraRig 的子物体。

其子对象 OVRHmdDataSource 被挂载 “From OVR Hmd Data Source” 脚本,表示其可以获取到头显的追踪数据。

(2)在 Project 窗口中的 Packages 找到 OVRHandPrefab,将其拖拽到 OVRCameraRig 的子物体 LeftHandAnchor 下。同时,失活其 “OVR Mesh” 和 “OVR Mesh Renderer” 脚本,并勾选 “OVR Skeleton” 脚本的 “Enable Physics Capsules” 选项。

(3)同样的设置应用于 OVRCameraRig 的子物体 RightHandAnchor,但是需要将 “OVR Skeleton” 脚本的 “Skeleton” 选项改为 “Hand Right”。

(4)在 Project 窗口中的 Packages 找到 OVRHands,将其拖拽为 OVRInteraction 的子物体。

运行程序,伸出双手,可以看到显示出对应的虚拟手,其数据来源对应于 OVRHands > LeftHand > OVRHandDataSource 上的 “From OVR Hand Data Source” 脚本。到此,配置大致完成。

3 更换 OVRHandSynthetic
更换 OVRHandSynthetic 是为了添加 “Synthetic Hand” 脚本,从而限定虚拟手部的手势(例如防止手势穿模)。
(1)在 Project 窗口中的 Packages 找到 OVRLeftHandSynthetic 和 OVRRightHandSynthetic,分别替换 OVRHands 下的 HandVisualsLeft 和 HandVisualsRight(可将其失活)。

(2)对 OVRLeftHandSynthetic 设置对应的 I Modify Data From Source Mono。OVRRightHandSynthetic 同理设置。

可以看到,相比于原来的 HandVisualsLeft,OVRLeftHandSynthetic 仅多挂载了一个 “Synthetic Hand” 脚本。而二者子对象均为 OVRLeftHandVisual,没有差异。
补充:Tracking Origin Type 三个选项的差异
官网解释:

Tracking Origin Type:追踪的参考系。
头显的位置和旋转数据用三维坐标表示。只有确立坐标系的原点后,才能给出三维坐标的值。
可以粗略地认为,Tracking Origin Type 相当于虚拟世界中头部的初始高度。
① Floor Level
以安全区地面(打开 VR 设备一般会先设置地面高度,然后划安全区)作为参考系,运行程序后头部高度以地面作为参考点,高度相当于摆放在场景中的玩家物体的高度加上现实中玩家头显到安全区地面的距离。

② Stage
和 Floor Level 一样,以地面作为参考系。
③ Eye Level
以头显设备本身作为参考系,头部高度相当于摆放在场景中的玩家物体的高度加上头显相对于设备自身坐标系的高度(每次设备定位成功后会建立设备自身的坐标系),不会额外加上现实中头显到地面的高度。

Stage 和 Floor Level 的导出区别
(1)重新定位
以 Quest3 为例,在 Unity 中运行项目时,长按右手柄的 Meta 键,会进行重新定位,即根据玩家当前的位置重新建立坐标系。

(2)区别
- Stage:Unity 导出程序后,长按右手柄的 Meta 键,不会进行重定位。
- Floor Level:Unity 导出程序后,长按右手柄的 Meta 键,会进行重定位。