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

news2024/10/7 4:34:52

文章目录

  • 📕教程说明
  • 📕HandGrabInteractor
    • ⭐HandGrabAPI
    • ⭐HandWristPoint
    • ⭐GripPoint
    • ⭐PinchPoint
    • ⭐PinchArea
    • ⭐HandGrabVisual
    • ⭐HandGrabGlow
  • 📕HandGrabInteractable
    • ⭐Support Grab Type
    • ⭐Pinch Grab Rules 和 Palm Grab Rules
    • ⭐Unselect Mode
    • ⭐Hand Alignment
    • ⭐Scaled Hand Grab Poses
    • ⭐Movement Provider
      • 🔍MoveTowardsTargetProvider
      • 🔍MoveFromTargetProvider
      • 🔍FollowTargetProvider

此教程相关的详细教案,文档,思维导图和工程文件会放入 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 越小,阻尼效果越明显。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1213981.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【SpringBoot3+Vue3】三【实战篇】-后端(优化)

目录 一、登录优化-redis 1、SpringBoot集成redis 1.1 pom 1.2 yml 1.3 测试程序(非必须) 1.4 启动redis,执行测试程序 2、令牌主动失效(代码优化) 2.1 UserController设置token到redis 2.2 登录拦截器Log…

下载huggingface预训练模型到本地并调用

写在前面 在大模型横行的时代,无法在服务器上连接外网的研究僧真的是太苦逼了,每次想尝试类似于CLIP,BLIP之类的大模型都会得到“requests.exceptions.ConnectionError: (MaxRetryError("HTTPSConnectionPool(host‘huggingface.co’, …

Win11系统安装或执行程序时提示:文件系统错误(-1073740771)解决方案

有用户反映,exe文件无法执行或者无法安装,报错如图所示: 解决方法: 方法一: 1.打开控制面板,可以采用”搜索“→”控制面板“的方式 2.控制面板选择“用户账户”,再选择“更改用户账户控制设…

TiDB单机集群模拟生产环境

1、先部署环境,安装5.4.3版本,详细的安装步骤见官方文档:单机集群模拟生产环境安装教程 配置文件topo.yaml global:user: "tidb"ssh_port: 22deploy_dir: "/tidb-deploy"data_dir: "/tidb-data"monitored:no…

【数据结构】线段树(点修区查)

数据结构-线段树(点修区查) 前置知识 分治递归二叉树 思路 我们需要维护一个支持单点修改,区间查询的数据结构,并且要求在线,一般使用线段树解决。 线段树是一个二叉树形的数据结构。 线段树的思想很简单&#xff0c…

Python---数据序列中的公共方法

公共方法就是 支持大部分 数据 序列。 常见公共方法---简单 运算符描述支持的容器类型合并字符串、列表、元组*复制字符串、列表、元组in元素是否存在字符串、列表、元组、字典not in元素是否不存在字符串、列表、元组、字典 案例: 合并 代码: # …

阿里云99元VS腾讯云88元,双11云服务器价格战,谁胜谁负?

在2023年的双十一优惠活动中,阿里云推出了一系列令人惊喜的优惠活动,其中包括99元一年的超值云服务器。本文将带您了解这些优惠活动的具体内容,以及与竞争对手腾讯云的价格对比,助您轻松选择最适合的云服务器。 99元一年服务器优…

使用SSH和SCP传输文件———详细入门教学实践

确保你已经在本地机器上安装了SSH客户端和SCP工具。 获取远程虚拟机的IP地址或主机名以及登录凭据(用户名和密码或私钥)。 打开终端(命令提示符)并输入以下命令来传输文件: scp /本地路径/文件 用户名远程虚拟机IP地…

ubuntu设置脚本开机自启动

rc-local.service flexmitd1:~$ cd /lib/systemd/system/ flexmitd1:/lib/systemd/system$ ls |grep rc-local.service rc-local.service rc-local.service.d flexmitd1:/lib/systemd/system$ pwd /lib/systemd/system flexmitd1:/lib/systemd/system$确保有rc-local.service文…

深入理解JMM(Java内存模型)

一、什么是JMM? Java内存模型(Java Memory Model简称JMM)是一种抽象的概念,并不真实存在,它描述的一组规则或者规范。通过这些规则、规范定义了程序中各个变量的访问方式。jvm运行的程序的实体是线程,而每个线程运行时,都会创建一…

C# - 委托、事件、Action、Func

前言:所有的名词,都是基于委托产生的 委托 (delegate) 解释: 其实就是一种指定格式的函数模版(容器) 这个模版(容器)可以用来存放各种格式和它相同的函数(的引用) 比如指定类型参数 指定参数个数 指定返回值等等 定义…

社区论坛小程序系统源码+自定义设置+活动奖励 自带流量主 带完整的搭建教程

大家好啊,又到了罗峰来给大家分享好用的源码的时间了。今天罗峰要给大家分享的是一款社区论坛小程序系统。社区论坛已经成为人们交流、学习、分享的重要平台。然而,传统的社区论坛往往功能单一、缺乏个性化设置,无法满足用户多样化的需求。而…

无人零售:创新优势与广阔前景

无人零售:创新优势与广阔前景 无人零售在创新方面具有优势。相比发展较为成熟的欧洲和日本的自动贩卖机市场,中国的无人零售市场人均占有量较少,这表明该市场具有广阔的前景和巨大的市场潜力。 此外,无人零售涉及到许多相关行业&…

GD32_ADC采样+DMA多通道扫描传输

GD32_ADC采样DMA多通道扫描传输 文章目录 GD32_ADC采样DMA多通道扫描传输前言一、资源介绍二、原理1.ADC连续扫描模式2.DMA传输3.ADC内部通道 三、配置1.ADC配置2.DMA配置3.注意事项 四、计算1.分压转换2.数据转换 前言 <1>、硬件平台&#xff1a;可运行软件程序的GD32单…

【算法】堆排序

算法-堆排序 前置知识 堆&#xff08;即将更新&#xff09; 思路 我们现在有一个序列&#xff0c;怎么对它排序&#xff1f; 这是一个非常经典的问题&#xff0c;这里我们使用一个借助数据结构的算法——堆排序解决。 这里有一个序列&#xff0c;要对它升序排序 4 7 3 6 5 …

前端开发好用的vscode插件

1.TONGYI Lingma 通义灵码&#xff0c;是一款基于通义大模型的智能编码辅助工具&#xff0c;提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解释、研发智能问答、异常报错排查等能力&#xff0c;并针对阿里云 SDK/API 的使用场景调优&#xff0…

云课五分钟-03第一个开源游戏复现-贪吃蛇

前篇 云课五分钟-02第一个代码复现-终端甜甜圈C 视频 云课五分钟-03第一个开源游戏复现-贪吃蛇 一个终端的动态字符显然很难调动编程的积极性&#xff0c;那么更有趣的开源的游戏也许是一种更好的启发。 文本 蓝桥ROS机器人之绚丽贪吃蛇 如何在Linux下使用 DungeonRush-mast…

【LeetCode】每日一题 2023_11_15 K 个元素的最大和(脑筋急转弯+数学)

文章目录 刷题前唠嗑K 个元素的最大和题目描述代码与解题思路 结语 刷题前唠嗑 LeetCode? 启动&#xff01;&#xff01;&#xff01; 首先声明一点啊&#xff0c;这个脑筋急转弯的题目标签可不是我想的啊&#xff0c;这个是 LeetCode 官方给这道题标注的啊 K 个元素的最大和…

贪吃蛇小游戏

一. 准备工作 首先获取贪吃蛇小游戏所需要的头部、身体、食物以及贪吃蛇标题等图片。、 然后&#xff0c;创建贪吃蛇游戏的Java项目命名为snake_game&#xff0c;并在这个项目里创建一个文件夹命名为images&#xff0c;将图片素材导入文件夹。 再在src文件下创建两个包&#…

SOLIDWORKS Simulation助您分析参数变化时的趋势及寻找设计参数的最优值

在分析一个装配体时&#xff0c;载荷、几何体及材料常数都被当做设计变量来处理&#xff0c;而设计情形可以很方便的应用到这种分析中&#xff0c;结果能以设计变量的函数进行图表来显示&#xff0c;同时它可以运行多个算例&#xff0c;从而帮助我们获得能够用于优化设计的趋势…