• Unity Meta Quest 一体机开发(六):HandGrabInteractor 和 HandGrabInteractable 知识点



    此教程相关的详细教案,文档,思维导图和工程文件会放入 Seed XR 社区。这是一个高质量知识星球 XR 社区,博主目前在内担任 XR 开发的讲师。此外,该社区提供教程答疑、及时交流、进阶教程、外包、行业动态等服务。

    知识星球链接:Seed XR 高级社区

    在这里插入图片描述


    📕教程说明

    这篇教程将会详细介绍 Meta XR SDK 中 HandGrabInteractor 和 HandGrabInteractable 的相关知识点。

    系列教程专栏:https://blog.csdn.net/qq_46044366/category_12118293.html

    配套的视频链接:
    【2023 VR+MR全硬件开发教程】六、HandGrab-HandGrabInteractor知识点(主讲:YY)

    【2023 VR+MR全硬件开发教程】六-2、HandGrabInteractable知识点(主讲:YY)

    ​电脑操作系统:Windows 11

    使用的 VR 设备:Meta Quest 3(Quest 系列都适用)

    使用的 Unity 版本:2021.3.5 LTS (这里推荐使用 2021 及以上的 LTS 版本)

    Meta XR SDK 版本:v57

    官方文档:https://developer.oculus.com/documentation/unity/unity-gs-overview/

    HandGrab:https://developer.oculus.com/documentation/unity/unity-isdk-hand-grab-interaction/


    📕HandGrabInteractor

    我们可以找到 Oculus Integration 官方提供的 Hand Grab 示例场景,在 Assets/Oculus/Interaction/Samples/Scenes/Examples 文件夹下的 Hand Grab Examples 场景:

    在这里插入图片描述
    找到 OVRCameraRig 玩家物体,左右手的 HandGrabInteractor 物体在如下图所示的位置:

    在这里插入图片描述

    HandGrabInteractor 物体上挂载了 HandGrabInteractor 脚本:

    在这里插入图片描述

    然后我们展开 HandGrabInteractor 物体,接下来我会讲解它身上这些子物体的作用:

    在这里插入图片描述

    ⭐HandGrabAPI

    检测 Hand Grab 是否选中或者取消选中可抓取物体,也就是检测抓取动作是否发生。

    ⭐HandWristPoint

    控制在抓取的时候虚拟手部和现实手部在位置和旋转角度上的偏移。

    ⭐GripPoint

    Palm Grab 的探测范围(下图中手掌处的球形范围),调整 GripPoint 上的 HandWristOffset 脚本参数可以修改探测范围的位置和旋转角度。物体进入探测范围后触发抓取,就会被吸到手上。

    在这里插入图片描述

    探测范围为 GripPoint 子物体 Collider 的碰撞体范围。

    在这里插入图片描述

    ⭐PinchPoint

    Pinch Grab 的探测范围,范围大小取决于 PinchPoint 子物体的 Collider 的碰撞体大小。

    在这里插入图片描述

    ⭐PinchArea

    PinchPoint 的 HandPinchOffset 脚本默认引用了 PinchArea 的碰撞体,PinchArea 碰撞体的位置会影响 PinchPoint 探测范围的位置。

    在这里插入图片描述

    PinchArea 碰撞体范围如下图所示。

    在这里插入图片描述

    注:是否能激活 Pinch Grab 实际上看的是物体是否进入到 PinchPoint 的球形检测范围内,而不是看物体是否进入到 PinchArea 范围内。

    ⭐HandGrabVisual

    连接 SyntheticHand,在手部呈现出完整的抓取手势后固定手部姿态,让抓取手势不与物体穿模。

    在这里插入图片描述

    ⭐HandGrabGlow

    控制抓取时手部的特效。

    在这里插入图片描述
    Glow Type
    Outline:手指轮廓高亮。

    在这里插入图片描述

    Fill:手指颜色填充。

    在这里插入图片描述

    Both:结合了 Outline 和 Fill


    📕HandGrabInteractable

    在 Hand Grab Examples 场景中找到可抓取的物体,每一个物体上有一到多个 HandGrabInteractable 子物体。

    在这里插入图片描述

    每一个 HandGrabInteractable 物体上挂载了一个 Hand Grab Interactable 脚本:

    在这里插入图片描述

    接下来,我来介绍一下脚本上的一些重要参数。

    ⭐Support Grab Type

    用 Hand Grab 当中的哪一种方式去抓取。

    在这里插入图片描述

    ⭐Pinch Grab Rules 和 Palm Grab Rules

    定义了Pinch Grab 和 Palm Grab 的触发需要用到哪几根手指。每一根手指有三个选项可以选择:Required,Optional,Ignored

    在这里插入图片描述

    被标记了 Required 的手指必须参与到抓取的触发过程中,也就是说如果我想要抓起一个物体,必须要用到标记了 Required 的手指。比如说五根手指中食指被标记了 Required,那么抓取的时候必须要用到食指,如果只用大拇指和中指是抓不起来的。

    如果没有手指被标记了 Required,那么想要抓起一个物体,至少要用到一个标记了 Optional 的手指。

    标记了 Ignored 的手指不会被考虑到抓取的触发过程中。

    ⭐Unselect Mode

    决定了抓取了一个物体后什么时候会视为取消抓取。

    在这里插入图片描述
    在这里插入图片描述

    如果选了All Released,当所有标记了 Required 或者 Optional 的手指松开后,视为取消抓取。

    如果选了Any Released,只要有一个标记了 Required 的手指松开后,就会视为取消抓取。

    ⭐Hand Alignment

    决定了在抓取的过程中,虚拟的手是如何变化到对应的抓取手势的。

    在这里插入图片描述

    Align On Grab:在抓取的时候会自动调整手部的姿态。

    Attract On Hover:手在靠近物体,进入到 Hover 状态后,仿佛会卡住,然后做出抓取的动作,虚拟手就会变化到对应的抓取手势。

    Align Fingers On Hover:在进入到 Hover 状态后开始抓取,手指就会逐渐变化到对应的抓取姿态。这个方式需要和 Align On Grab 进行比较会比较直观,如果选了 Align On Grab,虚拟手指在一开始会跟随现实的手进行弯曲,这个时候可能会与物体穿模,然后过一段时间后手指才会变化到抓取手势的姿态。如果选择了 Align Fingers On Hover,在手指弯曲的过程中如果接近了抓取姿态,手指就会直接被卡住,变化到对应的抓取手势,一般情况下手指是不会与物体穿模。

    在这里插入图片描述

    ⭐Scaled Hand Grab Poses

    在这里插入图片描述
    因为我们每个人的手部大小可能是不同的,设置Scaled Hand Grab Poses就可以为不同大小的手配备相应大小的抓取手势。

    ⭐Movement Provider

    在 HandGrabInteractable 脚本的 Optionals 下,有一个 Movement Provider 参数,如果没有赋值,在程序运行后会在改该物体上自动添加上一个 MoveTowardsTargetProvider 脚本,然后给 Movement Provider 参数赋值。

    在这里插入图片描述

    注:如果我们手动添加了 Movement Provider 类型的脚本,要手动给 Movement Provider 参数赋值。

    在这里插入图片描述

    这里介绍一下常用的几种的 Movement Provider:

    🔍MoveTowardsTargetProvider

    控制物体吸向手部的速度。

    在这里插入图片描述

    Travel Speed 越大,物体吸向手部所花的时间越多。

    🔍MoveFromTargetProvider

    抓取物体的时候,手部主动吸向物体,而不是物体吸向手部。

    在这里插入图片描述

    🔍FollowTargetProvider

    让物体被抓取的时候吸向手部,但是带有阻尼衰减运动。也就是物体吸到手上时还会不停地晃,然后慢慢恢复正常状态。Speed 越小,阻尼效果越明显。

    在这里插入图片描述

  • 相关阅读:
    STM32实战总结:HAL之wifi
    JavaScript 数组如何实现冒泡排序?
    最新,2022年国自然立项数量统计出炉
    ​软考-高级-系统架构设计师教程(清华第2版)【第10章 软件架构的演化和维护(P345~382)-思维导图】​
    java毕业生设计校园教育服务平台计算机源码+系统+mysql+调试部署+lw
    docker容器里面的java进程内存泄露排查
    USART的标准库编程
    HTTP 代理服务器的设计与实现(C++)
    给定DNA序列,查找有效匹配子串
    C语言之自定义类型_结构体篇(2)
  • 原文地址:https://blog.csdn.net/qq_46044366/article/details/134410190