Choose your operating system:
Windows
macOS
Linux
OpenXR运行时使用 交互配置文件 来支持各种硬件控制器,并为控制器连接到的任何设备提供操作绑定。虚幻引擎中的OpenXR输入映射依赖 操作映射输入系统 来将操作连接到OpenXR交互配置文件。有关如何使用操作映射输入系统的指南,请参见 创建新输入 。
OpenXR输入系统旨在通过模拟未使用虚幻项目中的 操作映射(Action Mappings) 显式指定的任何控制器映射来提供跨设备兼容性。在模拟控制器映射时,OpenXR运行时将会选择与用户控制器密切匹配的控制器绑定。 由于OpenXR提供了这种跨设备兼容性,因此你只需要为你支持并可以进行测试的控制器添加绑定。你为控制器指定的任何绑定都会定义连接到该控制器的操作。如果你仅将绑定部分应用到控制器,则控制器不会支持任何缺失的绑定。 在下例中,项目具有两个操作: 跳跃(Jump) 和 拾取(Pickup) 。
-
跳跃(Jump) 映射到多种控制器上的键,例如 Vive Index (L)触发器(Vive Index (L) Trigger) 和 Oculus Touch (L)触发器(Oculus Touch (L) Trigger) 。
-
拾取(Pickup) 仅映射至 Valve Index (L) A Touch 。 在这种情况下,OpenXR运行时将不会在任何其他控制器上模拟 拾取(Pickup) 操作,因为这些控制器绑定了 跳跃(Jump) ,但没有绑定 拾取(Pickup) 。如果从 跳跃(Jump) 中移除了其他控制器的键,则OpenXR运行时将无法为模拟器模拟 跳跃(Jump) 和 拾取(Pickup) 。
某些运行时可能支持单个配置,无法模拟其他配置。推荐你为尽可能多的设备添加绑定。
姿势
OpenXR提供了两个姿势来表示用户在执行操作时应该使用的手势:
-
抓握(Grip): 表示用户为了抓住虚拟对象而抓握时的位置和方向。
-
瞄准(Aim): 表示从用户的手或控制器延伸出的光线,用于指向目标。 如需这两种姿势的详细信息,请参见OpenXR 规格 。在虚幻引擎中,如果这两种姿势可供你的设备使用,则表示为动作源,并在调用 枚举动作源 时作为结果返回。
虚幻引擎使用的坐标系与OpenXR规格中规定的坐标系不同。虚幻使用左旋坐标系:+X表示向前,+Z向上,而+Y向右。
启用 OpenXRMsftHandInteraction 插件,在支持此扩展插件的运行时上(例如 HoloLens )复制所追踪手的抓握和瞄准姿势。
运动控制器
你可以通过项目的 Pawn 上的 运动控制器组件(Motion Controller Component) 访问 运动控制器(Motion Controllers) 。运动控制器组件继承自 场景组件 ,场景组件支持基于位置的行为,并根据来自硬件的追踪数据移动。此组件提供渲染运动控制器和为Pawn定义的用户交互公开控制器的功能。以下小节将介绍如何设置这两种功能。
可视化
在运动控制器组件 细节(Details) 面板的 可视化(Visualization) 分段下,你可以指定是否显示用于控制器的模型,以及使用哪个 静态网格体(Static Mesh) 。你还可以将 材质覆盖(Material Overrides) 应用于网格体。
在 细节(Details) 面板的 运动控制器(Motion Controller) 分段下,你可以设置用于运动控制器的 运动源(Motion Source) 。运动源是 FName ,用于识别XR体验中需要哪个输入源来获取其追踪位置和旋转。运动源的FName列表可以通过附加插件扩展。若要选择用户一只手上的控制器,请选择 左(Left) 或 右(Right) 运动源。
访问细节
由于运动控制器继承自场景组件,因此它包含设备在场景中的变换,你可以通过
GetWorldLocation
等函数访问这些变换。你还可以将网格体和其他场景组件附加到运动控制器组件,这样虚拟内容就好像附在你的手上一样。
若要访问有关运动控制器的设备专有信息,例如 持握位置(Grip Position) 或 手键位置(Hand Key Position) ,请将 Get Motion Controller Data 和 Break XRMotionControllerData 节点添加到你的蓝图中。你需要传入有关从哪个 手(Hand) 获取数据的信息。为此,请在你的 运动控制器(Motion Controller) 变量上调用 Get Motion Source ,查看它是设置为 左(Left) 还是 右(Right) ,并将其作为 Get Motion Controller Data 函数的 手(Hand) 输入传入。
插件间的定向
现在OpenXR定义了跨平台运动控制器行为的标准。
在创建OpenXR标准之前,每个SDK可能以不同的方式实现其行为,因此插件之间表示运动控制器的原点和方向的方式可能存在差异。下图以Oculus VR插件和OpenXR插件为例,演示了运动控制器如何在运行时以不同方式定向。
运动控制器组件具有3D小工具和作为子组件附加的Oculus Quest 2控制器模型。
-
左图显示了使用Oculus VR插件的运行时行为。控制器的原点位于操纵杆的位置,控制器的方向为Z轴和X轴之间形成的角度。
-
右图显示了使用OpenXR plugin插件的运行时行为。控制器原点位于持握按钮的位置,控制器方向与X轴平行。
|
|
手部追踪
目前有两个平台支持使用虚幻引擎进行手部追踪:HoloLens 2和Oculus Quest。以下小节将介绍在这些平台上将手部追踪用于用户输入的入门知识。
HoloLens 2
HoloLens 2上的手部追踪可通过Microsoft OpenXR插件获取。
Microsoft OpenXR
插件中定义的手部追踪功能与
OpenXR
和
XRMotionController
函数兼容。有关可视化用户手部并将其用作输入的更多细节,请参阅Microsoft的
手部追踪文档
。
Oculus Quest
Oculus Quest的手部追踪可通过 Oculus VR 插件获取。若要在OpenXR应用程序中使用Oculus Quest的手部追踪,必须同时启用 OpenXR 和 Oculus VR 插件。Oculus Quest的手部追踪API通过Oculus自定义组件提供。有关可视化用户手部并将其用作输入的更多细节,请参阅Oculus的 手部追踪文档 。