获取完整课程以及答疑,工程文件下载:
https://www.spatialxr.tech/


这篇教程将会介绍 Meta XR SDK(旧版叫做 Oculus Integration)中 OVRManager 的 Eye Level,Floor Level,Stage 的区别。

在这里插入图片描述
Oculus Integration 开发包中有个 OVRManager 脚本被挂载到 OVRCameraRig 物体上。OVR Manager 中有个 Tracking Origin Type 参数,它相当于追踪的参考系,参数分为 Eye Level, Floor Level 和 Stage。
VR 设备会对头显进行追踪,于是现实中头显的位置和旋转数据会被传输给 Unity,让 Unity 中的眼部相机匹配上现实中玩家头显的位置和朝向。而头显的位置和旋转数据是个三维坐标,那么它们的值一定是相对于某个参考系的,只有确立坐标系的原点后,才能给出三维坐标的值。 这时候 Tracking Origin Type 参数就派上了用场。Oculus 官方文档对三种 Type 的定义是这样的:(https://developer.oculus.com/documentation/unity/unity-add-camera-rig/

  • Eye Level tracks the position and orientation relative to the device’s position.
  • Floor Level tracks the position and orientation relative to the floor, whose height is decided through guardian setup.
  • Stage also tracks the position and orientation relative to the floor. On Quest, the Stage tracking origin will not directly respond to user recentering.

如果直观的看,Tracking Origin Type 也相当于设置 VR 世界中头部的初始高度。

选择 Floor Level,会以安全区的地面(打开 VR 设备一般都会先设置地面高度,然后划安全区)作为参考系,运行程序后头部高度会以地面作为参考点,高度相当于摆放在场景中的玩家物体的高度加上现实中玩家头显到安全区地面的距离。

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

选择 Stage,和 Floor Level 一样也是以地面作为参考系,但是不会受头显的重定位影响。重定位是什么意思呢?以 Quest 举例,长按右手柄的 Oculus 键或者重新划安全区会对用户的位置和朝向重新定位,根据用户当前的位置和朝向重新定位原点的位置。假设刚进入一个游戏,我们在现实中的位置相当于虚拟世界中的初始位置,位于(0,0,0)原点,然后一开始有个方块处于我们的正前方。这时候我们在现实中转过 90°,然后往前走一步,再进行重定位。如果选择的是 Floor Level,方块就会被重新定位在我们的正前方,和一开始的位置是不一样的;如果选择的是 Stage,重定位是不起作用的,方块还会位于原来的位置。

大家可以通过下面的图感受它们的区别,也建议自己打包出来运行一下。
(注:只有打包出来,在一体机中运行,才能看到 Stage 不受重定位的影响,在串流的时候是看不出来的)

相机的初始高度

Eye Level:

在这里插入图片描述

Floor Level / Stage:

在这里插入图片描述

Floor Level 和 Stage 的区别

Floor Level:

在这里插入图片描述

Stage:

在这里插入图片描述

Logo

这里是一个专注于游戏开发的社区,我们致力于为广大游戏爱好者提供一个良好的学习和交流平台。我们的专区包含了各大流行引擎的技术博文,涵盖了从入门到进阶的各个阶段,无论你是初学者还是资深开发者,都能在这里找到适合自己的内容。除此之外,我们还会不定期举办游戏开发相关的活动,让大家更好地交流互动。加入我们,一起探索游戏开发的奥秘吧!

更多推荐