使用OpenXR进行输入

OpenXR运行时提供控制器模拟功能以支持尽可能多的平台,并提供控制器和手势以营造沉浸式交互体验。

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 )复制所追踪手的抓握和瞄准姿势。 OpenXR手部交互插件

运动控制器

你可以通过项目的 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轴平行。

此图展示了相对于运行时使用Oculus VR插件的Quest 2控制器模型,运动控制器组件的变换,用3D小工具说明

此图展示了相对于运行时使用OpenXR插件的Quest 2控制器模型,运动控制器组件的变换,用3D小工具说明

手部追踪

目前有两个平台支持使用虚幻引擎进行手部追踪:HoloLens 2和Oculus Quest。以下小节将介绍在这些平台上将手部追踪用于用户输入的入门知识。

HoloLens 2

HoloLens 2上的手部追踪可通过Microsoft OpenXR插件获取。 Microsoft OpenXR 插件中定义的手部追踪功能与 OpenXR XRMotionController 函数兼容。有关可视化用户手部并将其用作输入的更多细节,请参阅Microsoft的 手部追踪文档

HoloLens手部追踪

Oculus Quest

Oculus Quest的手部追踪可通过 Oculus VR 插件获取。若要在OpenXR应用程序中使用Oculus Quest的手部追踪,必须同时启用 OpenXR Oculus VR 插件。Oculus Quest的手部追踪API通过Oculus自定义组件提供。有关可视化用户手部并将其用作输入的更多细节,请参阅Oculus的 手部追踪文档

Oculus Quest手部追踪

培训数据流

欢迎帮助改进虚幻引擎文档!请告诉我们该如何更好地为您服务。
填写问卷调查
取消