XRInputSource:handedness 属性

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

只读的 XRInputSource 属性 handedness 指示 WebXR 输入源与用户的哪只手相关联,或者是否与任何手都不相关联。

一个字符串,指示输入控制器是握在用户的手中,如果是,则指示是哪只手。该值是以下之一:

none

输入控制器未与用户的任何一只手相关联。

left

输入控制器正被用户握在左手中、戴在左手上或附着在左手上。

输入控制器正被用户握在右手中、戴在右手上或附着在右手上。

用法说明

如果输入源不是与用户的手(无论是通过握持、附着还是佩戴)相关联的设备,则 handedness 的值为 none。例如,这可能表示一个非手持的输入源,比如头显内置的控件,或者附着在头部或身体上的输入设备。

示例

handedness 的一个重要使用场景是确定控制器在哪只手中,以便您可以在虚拟空间中绘制该手(或该手正在控制的设备)的表示。

js
function updateInputSources(session, frame, refSpace) {
  for (const source of session.inputSources) {
    if (source.gripSpace) {
      const gripPose = frame.getPose(source.gripSpace, refSpace);

      if (gripPose) {
        myRenderHandObject(gripPose, inputSource.handedness);
      }
    }
  }
}

此函数将在每个动画帧(或可能仅定期,取决于所需的平滑度以及任何性能限制)被调用,它会扫描输入源列表,查找任何具有非 null gripSpace 的输入源。如果存在 gripSpace,则表示该输入源是某种手持设备,因此应尽可能可见地进行渲染。

如果 gripSpacenull,该函数将继续获取 gripSpace 转换到当前参考空间中的姿势。假设该姿势有效,则会调用一个名为 myRenderHandObject() 的函数,并传入握持器的姿势以及 handedness 的值。然后,它会以正确的手部姿势和形状绘制相应的模型。

规范

规范
WebXR Device API
# dom-xrinputsource-handedness

浏览器兼容性

另见