开发
开发
选择平台

手势设置

更新时间: 2024年12月19日
推荐 Unity 开发者采用互动 SDK 来集成手势追踪,该方法提供标准化的互动和手势。不使用此 SDK 构建自定义互动将带来巨大挑战,而且很难在商店中获得批准。
应用程序渲染手势的方式与任何其他输入设备相同。首先设置相机。选择手势作为输入设备,然后添加手势 prefab,以默认形式渲染手势。以下各节介绍了基本设置:
如果您是在 Quest 上使用 Unity 进行开发的新手,请查看 Hello World 指南来创建您的第一个 VR 应用。

设置相机

  1. 创建新场景或从您的项目中打开现有场景。
  2. Project(项目)选项卡中,搜索 OVRCameraRig 并将它拖动到场景中。如果场景中已经存在 OVRCameraRig,请跳过此步骤。
  3. Hierarchy(层级结构)选项卡中选择 OVRCameraRig,打开 Inspector(检查器)选项卡。
  4. Inspector(检查器)选项卡中,前往 OVR Manager(OVR 管理器)> Tracking(追踪),在 Tracking Origin Type(追踪原点类型)列表上选择 Floor Level(地面高度)。
  5. 如果尚未删除 GameObject,在 Hierarchy(层级结构)选项卡上右键点击 Main Camera(主相机)将其删除。

选择手势作为输入设备

  1. Hierarchy(层级结构)选项卡中选择 OVRCameraRig,打开 Inspector(检查器)选项卡。如果您是从上文提及的“设置相机”一节继续操作,请跳过此步骤。
  2. Inspector(检查器)中,前往 OVR Manager(OVR 管理器)> Quest Features(Quest 功能),然后从 Hand Tracking Support(手势追踪支持)列表中选择 Controllers and Hands(控制器和手势)。选择 Hands Only(仅限手势)选项,使用手势作为输入模态,无需借用任何控制器。
    选择“控制器和手势”或“仅限手势”选项时,Meta Quest 会在 AndroidManifest.xml 文件中自动添加<uses-permission android:name="com.oculus.permission.HAND_TRACKING" /><uses-feature android:name="oculus.software.handtracking" android:required="false" /> 元素。当应用支持控制器和手势时,android:required 会设置为 false,这意味着应用会优先使用手势(如有)。但是,如果没有手势,则应用将继续使用控制器。如果应用支持“仅限手势”,android:required 会设置为 true。Oculus 会自动添加这两个标签,无需在 Android 清单文件文件中手动更新。
  3. Hand Tracking Version(手势追踪版本)列表中保留 Default(默认)选择,以便使用最新版本的手势追踪(Hands 1.0 现已停用。选择 1.0 或 2.0 会强制将应用升级至 Hands 2.0,这可能会阻止自动升级到未来的主要版本)

添加手势 Prefab

  1. Hierarchy(层级结构)选项卡中,展开 OVRCameraRig > TrackingSpace,在左手和右手锚点下添加手势 prefab。
  2. Project(项目)选项卡中,搜索 OVRHandPrefab,然后将其拖动到 Hierarchy(层级结构)选项卡上每个手势锚点下方。
  3. Hierarchy(层级结构)选项卡中,从 RightHandAnchor 下选择 OVRHandPrefab;然后在 Inspector(检查器)选项卡中,在 OVR Hand(OVR 手势)、OVR Skeleton(OVR 骨架)和 OVR Mesh(OVR 网格)下,将手势类型更改为右手。由于手势类型自动设置为左手,因此无需对左手 prefab 采取操作。
  4. Hierarchy(层级结构)选项卡中,选择两个 OVR 手势 prefab;然后在 Inspector(检查器)选项卡中,确保勾选了 OVR Skeleton(OVR 骨架)、OVR Mesh(OVR 网格)和 OVR Mesh Renderer(OVR 网格渲染器)复选框,以便在应用中渲染手势。
此时应用能够将手势作为输入设备进行渲染。要测试手势,戴上头戴设备,前往 Settings(设置)> Movement tracking(运动追踪),然后打开 Hand and body tracking(手势和身体追踪)。保持选中 Auto Switch Between Hands And Controllers(在手势和控制器间自动切换),这样您就能够在放下控制器时使用手势进行控制。通过 Unity 在头戴设备上构建和运行应用。在头戴设备上启动应用后,放下控制器,向前伸出双手,它们在应用中将作为输入设备。

更新根姿势和根大小

要生成和渲染手势的动态 3D 模型,OVR 网格渲染器会将 OVR 骨架OVR 网格返回的数据进行结合。OVR 骨架会返回绑定姿势、骨骼层级结构和胶囊碰撞体数据。OVR 网格会从 Oculus 运行时加载特定的 3D 素材,并将其公开为 Unity Engine 网格。我们已经预配置了推荐设置,并对其作了详细解释。
  1. Hierarchy(层级结构)选项卡中,展开 OVRCameraRig > TrackingSpace,然后在 LeftHandAnchor下选择 OVRHandPrefab prefab。
  2. Inspector(检查器)选项卡中,从 OVR Skeleton(OVR 骨架)下方选择 Update Root Pose(更新根姿势)复选框。
    OVRHandPrefab 在 OVRCameraRig 对象下设为左手和右手锚点的父级时,让 Update Root Pose(更新根姿势)复选框保持未勾选状态,以便手势锚点可正确定位追踪空间内的手势。如果 OVRHandPrefab 独立于 OVRCameraRig 放置,请选择该复选框,确保手指、骨骼和手的实际根部都能正确更新。
  3. Inspector(检查器)选项卡中,从 OVR Skeleton(OVR 骨架)下方选择 Update Root Scale(更新根大小)复选框。
    这样就可以通过相对于参考手部模型的统一大小来估计用户的手部尺寸。参考手部模型大小默认设置为 100% (1.0)。通过启用缩放功能,手部模型尺寸将根据用户的实际手部尺寸放大或缩小。手部大小可能随时更改,我们建议适时缩放手部,以便在运行时进行渲染和互动。如果您想要使用默认参考手部大小,请从复选框中清除选择。
  4. RightHandAnchor 下的 OVRHandPrefab prefab 重复此环节的操作。

添加物理胶囊

物理胶囊表示手部的骨骼体积,用于触发与物理对象的互动并生成与物理系统中其他刚体的碰撞事件。
  1. 层级结构选项卡中,展开 OVRCameraRig > TrackingSpace,然后选择您想要用于物理互动的 OVR 手势 prefab。
  2. Inspector(检查器)选项卡中,从 OVR Skeleton(OVR 骨架)下方选择 Enable Physics Capsules(启用物理胶囊)复选框。
  3. 对另一个手势 prefab 重复步骤 1 和 2。

自定义显示

默认手部模型经过蒙皮处理。蒙皮网格渲染器可显示定义模型在场景中渲染方式的属性。确保已选中 Skinned Mesh Renderer(蒙皮网格渲染器)复选框。您可定义三个广泛的类别来自定义手部模型:
  • 材质定义手势在应用中出现的方式。根据着色器配置适合内容的材质。例如,选择金属或镜面工作流程,设置渲染模式,定义基色或调整平滑度。如需进一步了解材质,请前往 Unity 文档中的创建和使用材质指南。
  • 光照指定网格渲染器是否以及如何投射和接收阴影。
  • 探针包含相关属性,用于设置渲染器从光照探针系统接收光的方式。
要定义蒙皮网格渲染器属性,请执行下列操作:
  1. Hierarchy(层级结构)选项卡中,展开 OVRCameraRig > TrackingSpace,然后从任一手势锚点选择 OVR 手势 prefab。
  2. Inspector(检查器)选项卡上,执行以下操作:
    • 确保已选中 Skinned Mesh Renderer(蒙皮网格渲染器)复选框。
    • Materials(材质)下,输入要使用的材质数量,然后将材质拖动到材质列表中。大小默认设置为 1,且第一个元素始终是元素 0。
    • Lighting(光照)下的 Cast Shadows(投射阴影)列表中,选择当适当光线照射到渲染器上时,渲染器应如何投射阴影,然后选中 Receive Shadows(接收阴影)复选框,让网格显示投射在其上的任何阴影。
    • Probes(探针)下的 Light Probes(光照探针)列表,选择渲染器应如何使用插值光照探针。渲染器默认使用一个插值光照探针。
  3. 对另一个 OVR 手势 prefab 重复步骤 1 和 2。
要使用自定义网格,请映射由我们骨架驱动的自定义骨架。如需进一步了解示例用法,请参阅 HandTest_Custom 场景,其使用 OVRCustomHandPrefab_LOVRCustomHandPrefab_R prefab,以及 OVRCustomSkeleton.cs 脚本。
要启用线框骨架渲染(以线框线条渲染骨骼,便于视觉调试),请在 Hierarchy(层级结构)选项卡上,展开 OVRCameraRig > TrackingSpace,然后从手部锚点选择 OVR 手部 prefab。在 Inspector(检查器)选项卡中,勾选 OVR Skeleton Renderer(OVR 骨骼渲染器)复选框。

手部骨架版本

自版本 71 起, SDK 支持一种新型手部骨架:OpenXR 手部骨架。该骨架符合适用于手部骨架的 OpenXR 标准,其骨骼和对齐方式与以前使用的 OVR 手部骨架不同。由于 OpenXR 骨架是行业标准,切换至此新版骨架可在不同平台间获得更好的兼容性,不过以前使用的 OVR 手部骨架仍受支持,在 Hierarchy(层级结构)选项卡中选择 OVRCameraRig,然后在 Inspector(检查器)选项卡中的 OVR Manager(OVR 管理器)下将 Hand Skeleton Version(手部骨架版本)下拉菜单设置为 OVR Hand Skeleton(OVR 手部骨架)即可访问。
Hand Skeleton Version Selection
可通过 OVRManager 上的手部骨架版本下拉菜单来更改手部骨架。Meta 核心 SDK 功能会自动考虑手部骨架版本之间的差异,但如果您直接引用特定骨骼及其对齐方式,则这种行为在不同的手部骨架版本之间可能有所变化。
此处列出了 OVR 手部骨架和 OpenXR 手部骨架之间的具体差异。
 OpenXR 手部骨架OVR 手部骨架
前臂
不包含
包含
手掌
包含
不包含
大拇指
掌骨、近端、远端、尖端
大多角骨、掌骨、近端、远端、尖端
食指
掌骨、近端、中端、远端、尖端
近端、中端、远端、尖端
中指
掌骨、近端、中端、远端、尖端
近端、中端、远端、尖端
无名指
掌骨、近端、中端、远端、尖端
近端、中端、远端、尖端
小指
掌骨、近端、中端、远端、尖端
掌骨、近端、中端、远端、尖端
总计
26 个关节
24 个关节
对齐方式
双手均以 z 轴向前y 轴向上方式对齐
右手以 x 轴向前y 轴向上方式对齐,对左手关节作镜像处理