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

文章目录

  • 📕教程说明
  • 📕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.mzph.cn/news/144030.shtml

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

相关文章

BMS系统项目

1、通过电压监测是否冲满,通过电压可以监测是否放完电 电池得参数 单体过压(充满电) 过压恢复(百分之90多) 欠压保护(百分之几得电,快关机了) 欠压恢复(就是欠压之上…

C#中.NET 6.0 Windows窗体应用通过EF访问数据库并对数据库追加、删除记录

目录 一、应用程序设计 二、应用程序源码 三、生成效果 前文作者发布了在.NET 6.0 控制台应用中通过EF访问已有数据库,事实上,在.NET 6.0 Windows窗体应用中通过EF访问已有数据库也是一样的。操作方法基本一样,数据库EF模型和上下文都是自…

EV代码签名证书

为了增强软件的安全性和可信度,EV代码签名证书(Extended Validation Code Signing Certificate)成为了一种具有最高级别保障的关键工具。 EV代码签名证书是一种由受信任的证书颁发机构(CA)或证书供应商提供的高级别代…

Harmony SDK API 版本 与 Harmony OS 版本对照表,及如何查看鸿蒙手机Harmony SDK Api 版本

Harmony SDK API 版本 与 Harmony OS 版本对照表 Harmony OSHarmony SDK APIHarmony 4.09Harmony 3.19Harmony 3.08Harmony 3.0 pre7Harmony 2.2.06Harmony 2.1.05Harmony 2.04 具体到真机上可能会有差异,如我的手机OS版本是2.0,按照上面表应该是4&…

QML20、布局

1.概述 首先,QML同样允许大家使用硬编码的方式将位置数值直接写到代码中,但是这样做首先难以适应UI的调整,其次代码维护起来也很困难。因此不推荐这样做。推荐大家使用的是以下三种布局管理器:Row,、Column、Grid、Flow,以及使用Anchor进行布局。 2.Row QML 中的 Row 元素…

[IJKPLAYER]基于DEMO分析IJKPLAYER(整理版本)

背景 博主主要是从事C语言开发,因此本文着重强调FFMPEG部分,关于JAVA应用和框架层只是一笔带过。IJKPLAYER的实质是对FFMPEG项目中的ffplayer程序进行的二次封装,通过JNI方式完成对外提供JAVA接口。 1.目录结构 activities:包含了demo的所有…

【电路】MOS管开关电路

目录 简介: MOS管导通特性 应用实例: MOS管的作用-开关 更好的理解方式: 仿真: 简介: MOS管也就是常说的场效应管(FET),有结型场效应管、绝缘栅型场效应管(又分为…

认知升级:模型与范式转换

你好,我是 EarlGrey,一名双语学习者,会一点编程,目前已翻译出版《Python 无师自通》、《Python 并行编程手册》等书籍。 点击上方蓝字关注我,持续获取编程干货、好书推荐和高效工具分享,一起提升认知和思维…

LeetCode - 141. 环形链表 (C语言,快慢指针,配图)

141. 环形链表 - 力扣(LeetCode) 1. 什么是快慢指针 这里我们我们将介绍环形链表的经典解法——快慢指针,简单理解,指针移动快的叫做快指针fast,移动速度慢的叫慢指针slow。一般我们设快指针走两步,慢指针走…

RSS订阅快速连接Notion

数环通让您可以通过不到几分钟的时间即可实现RSS订阅与Notion的对接与集成,从而高效实现工作流程自动化,降本增效! 1.产品介绍 RSS订阅是数环通的内置应用,很多用户通过RSS订阅来收集自己在各大平台上看的内容,当RSS…

【Mycat2实战】三、Mycat实现读写分离

1. 无聊的理论知识 什么是读写分离 读写分离,基本的原理是让主数据库处理事务性增、改、删操作, 而从数据库处理查询操作。 为什么使用读写分离 从集中到分布,最基本的一个需求不是数据存储的瓶颈,而是在于计算的瓶颈&#xff…

java实现插入排序

图解 以下是Java实现插入排序的代码: public class InsertionSort {public static void main(String[] args) {int[] arr {5, 2, 4, 6, 1, 3};insertionSort(arr);System.out.println(Arrays.toString(arr)); // output: [1, 2, 3, 4, 5, 6]}public static void i…

线程安全问题及其解决

文章目录 一. 线程安全问题1.1 线程不安全的例子1.2 线程不安全的原因1.2.1 随即调度, 抢占式执行1.2.2 修改共享数据1.2.3 修改操作非原子性1.2.4 内存可见性1.2.5 指令重排序1.2.6 总结 二. 线程安全问题的解决2.1 synchronized(解决前三个问题)2.1.1 synchronized 的锁是什么…

247:vue+openlayers 根据坐标显示多边形(3857投影),计算出最大幅宽

第247个 点击查看专栏目录 本示例是演示如何在vue+openlayers项目中根据坐标显示多边形(3857投影),计算出最大幅宽。这里先通过Polygon来显示出多边形,利用getExtent() 获取3857坐标下的最大最小x,y值,通过ransformExtent转换坐标为4326, 通过turf的turf.distance和计算…

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

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

rabbitmq 集群搭建

RabbitMQ集群介绍 RabbitMQ集群是一组RabbitMQ节点(broker)的集合,它们一起工作以提供高可用性和可伸缩性服务。 RabbitMQ集群中的节点可以在同一物理服务器或不同的物理服务器上运行。 RabbitMQ集群的工作原理是,每个节点在一个…

C++编写的多线程自动爬虫程序

以下是一个使用C编写的爬虫程序&#xff0c;用于爬取Python进行多线程跑数据的内容。本示例使用了Python的requests库来发送HTTP请求&#xff0c;并使用cheeseboy的爬虫ipIP库来设置爬虫ip信息。以下是详细代码和步骤&#xff1a; #include <iostream> #include <stri…

StyleGAN:彻底改变生成对抗网络的艺术

一、介绍 多年来&#xff0c;人工智能领域取得了显着的进步&#xff0c;其中最令人兴奋的领域之一是生成模型的发展。这些模型旨在生成与人类创作没有区别的内容&#xff0c;例如图像和文本。其中&#xff0c;StyleGAN&#xff08;即风格生成对抗网络&#xff09;因其创建高度逼…

12-使用vue2实现todolist待办事项

个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大二在校生 &#x1f921; 个人主页&#xff1a;坠入暮云间x &#x1f43c;座右铭&#xff1a;懒惰受到的惩罚不仅仅是自己的失败&#xff0c;还有别人的成功。 &#x1f385;**学习目标: 坚持每一次的学习打卡 文章…

【Spring Boot】035-Spring Boot 整合 MyBatis Plus

【Spring Boot】035-Spring Boot 整合 MyBatis Plus 【Spring Boot】010-Spring Boot整合Mybatis https://blog.csdn.net/qq_29689343/article/details/108621835 文章目录 【Spring Boot】035-Spring Boot 整合 MyBatis Plus一、MyBatis Plus 概述1、简介2、特性3、结构图4、相…