Unity 跨平台开发 如果开发者以多个平台和设备为目标,则可以使用
Meta XR 核心 SDK 来构建支持 OpenVR 的平台并将其定为目标。本页面将详细介绍支持跨平台开发的 API 以及与典型的 Meta 开发之间的功能差异。本页面不会详细说明这些 API 的用途和开发流程,Unity 指南的其他部分将涉及这些内容。
跨平台开发允许开发者编写一套应用代码,在分别针对 Meta 或 SteamVR 平台进行编译后,只需极少额外工作即可立即开始运作。跨平台输入支持通常适配 6DOF 头戴设备和控制器,例如 Rift S 和 Touch 控制器、HTC Vive™ 和控制器,以及 Windows 混合现实头戴设备及其运动控制器。
采取上述“使用 OVRCameraRig 添加相机装置”指南中所述的相同步骤。如果您正在更新现有应用,则需要删除现有相机,并将新的相机 prefab 拖动到场景中,以追踪 OpenVR 头戴设备和控制器。
添加 OVRCameraRig prefab 时,您必须选择追踪原点 FloorLevel 。EyeLevel 不支持跨平台开发。
进行跨平台开发时,控制器追踪的对象必须创建为 LControllerAnchor 或 RControllerAnchor 的子对象。
以下 OVRDisplay API 支持跨平台开发,可用来检索头戴设备相对于本地追踪空间的移动速度。
OVRDisplay.velocity() OVRDisplay.angularvelocity() OVRInput 指南介绍了为 Meta 控制器使用 OVRInput API 的方法。以下 API 支持跨平台开发:
单个按钮 -
Get()、
GetUp()、
GetDown() 支持下列按钮,其中
Get() 返回控件的当前状态(如被按下,则为 true),
GetUp() 返回控件在帧中是否被松开(如被松开,则为 true),
GetDown() 返回控件在帧中是否被按下(如被按下,则为 true)。有关 Meta Touch 控制器映射的信息,请参阅
OVRInput 页面。
Button.PrimaryIndexTrigger Button.SecondaryIndexTrigger Button.PrimaryHandTrigger Button.SecondaryHandTrigger Button.PrimaryThumbstick Button.SecondaryThumbstick Button.Two Button.Four Axis1D.PrimaryIndexTrigger Axis1D.PrimaryHandTrigger Axis1D.SecondaryIndexTrigger Axis1D.SecondaryHandTrigger Axis2D.PrimaryThumbstick Axis2D.SecondaryThumbstick 这些 API 将 Meta Touch 控制器和 Vive 控制器一律视为“Touch”,以便继续向后兼容现有应用。左 XR 控制器 = LTouch,右 XR 控制器 = RTouch。可以请求获取以下各项的按钮或控件状态:
Controller.LTouch Controller.RTouch Controller.Touch 针对跨平台使用,应将 Touch 控制器指定为第 2 个参数,例如 LTouch 或 RTouch,然后将“primary”(主要)绑定指定为第 1 个参数。您不一定要把 Touch 控制器指定为第 2 个参数,但这往往能让情况变得更简单。例如:
当左 XR 控制器的握柄按钮或手势触发器被按住时,OVRInput.Get(Button.PrimaryHandTrigger, Controller.LTouch) 会返回 true。 当左 XR 控制器的顶部按钮在帧中被按下时,OVRInput.GetDown(Button.Two, Controller.LTouch) 会返回 true。这代表 Meta Touch 的 Y 按钮,以及 Vive 控制器顶部的 3 条按钮。如果指定的是 RTouch,这将代表 Touch 的 B 按钮。 OVRInput.Get(Axis1D.PrimaryIndexTrigger.Controller.RTouch) 会返回轴值,范围为 0 到 1.0,代表右 XR 控制器的食指触发器被按下的程度。 控制器位置和速度 - 以下 OVRInput API 支持跨平台开发,可用来检索控制器在空间中的位置以及相对于本地被追踪空间的移动速度。
GetLocalControllerPosition() GetLocalControllerRotation() GetLocalControllerVelocity() GetLocalControllerAngularVelocity() 支持的 OpenVR 控制器的按钮映射
HTC Vive 控制器
上文所述的 OVRInput API 在 HTC Vive 控制器上映射到以下按钮:
Button.Two 映射到“菜单按钮”(上图的 #1)。 Axis2D.PrimaryThumbstick 映射到电容“触控板”(上图的 #2)。 Button.PrimaryThumbstick 映射到按下“触控板”(上图的 #2)的动作。 Axis1D.PrimaryIndexTrigger 映射到“触发器”(上图的 #7)。 Axis1D.PrimaryHandTrigger 映射到“握柄按钮”(上图的 #8)。 Microsoft 混合现实运动控制器
上文所述的 OVRInput API 在 Microsoft 混合现实运动控制器上映射到以下按钮,详情请见 Microsoft 的
运动控制器 页面(请参阅“硬件详细信息”下的控制器图像)。
Button.Two 映射到“菜单”。 Axis2D.PrimaryThumbstick 映射到“摇杆”。 Button.PrimaryThumbstick 映射到按下“触控板”的动作。 Axis1D.PrimaryIndexTrigger 映射到“触发器”。 Axis1D.PrimaryHandTrigger 映射到“抓取”。 可通过 SetControllerVibration API 实现跨平台触感反馈支持。OVRHpatics 和 OVRHapticsClip API 不支持跨平台开发。
如需了解 API 的用例,请参阅
OVRInput 指南;跨平台设备支持 0 至 1(包含 0 和 1)之间的任何增量的振幅,以及 1.0 的频率。例如 -
对于右 XR 控制器,OVRInput.SetControllerVibration(1.0f, 0.5f, Controller.RTouch) 以峰值振幅的 50% 触发触感反馈。触感反馈将维持当前振幅持续运行,直至设置新的震动参数(或设为 0)所有的震动都将在 2 秒后超时。 OVRInput.SetControllerVibration(1.0f, 0.0f, Controller.RTouch) 会停止右 XR 控制器上的触感反馈运行。 如 OVRBoundary 指南所述,OVRBoundary 支持开发者检索和设置用户游戏区的信息。以下 API 支持跨平台开发。
GetDimensions() GetGeometry() SetVisible() GetVisible() GetConfigured() 如需了解如何使用 OVROverlay 添加叠加特效,请参阅
VR 合成图层 指南。目前,只有 Quad 全局锁定的叠加特效支持跨平台开发。
若要使用跨平台叠加特效,请在场景中添加 Quad GameObject,删除网格渲染器和碰撞器组件,在 Quad 中添加 OVROverlay 组件,并指定要显示的纹理。