Unity Meta Quest 一体机开发(五):手势抓取概述
文章目录
- 📕教程说明
- 📕 Oculus Integration 中的三种手势抓取方式
- ⭐Hand Grab
- ⭐Touch Hand Grab
- ⭐Distance Hand Grab
此教程相关的详细教案,文档,思维导图和工程文件会放入 Seed XR 社区。这是一个高质量知识星球 XR 社区,博主目前在内担任 XR 开发的讲师。此外,该社区提供教程答疑、及时交流、进阶教程、外包、行业动态等服务。
知识星球链接:Seed XR 高级社区

📕教程说明
这篇教程将会对 Meta XR SDK 中三种手势抓取方式做一个概述,让大家能够区分这三种抓取方式的不同。
系列教程专栏:https://blog.csdn.net/qq_46044366/category_12118293.html
配套的视频链接:2023 VR+MR全硬件开发教程】五 、手势追踪物体抓取概述(主讲:YY)
电脑操作系统:Windows 11
使用的 VR 设备:Meta Quest 3(Quest 系列都适用)
使用的 Unity 版本:2021.3.5 LTS (这里推荐使用 2021 及以上的 LTS 版本)
Oculus Integration 版本:v57
官方文档:https://developer.oculus.com/documentation/unity/unity-gs-overview/
📕 Oculus Integration 中的三种手势抓取方式
Oculus Integration SDK 中主要有三种手势抓取方式:Hand Grab,Touch Hand Grab,Distance Hand Grab

⭐Hand Grab
https://developer.oculus.com/documentation/unity/unity-isdk-hand-grab-interaction/
Hand Grab 主要分为 Pinch Grab 和 Palm Grab。
Pinch Grab 模拟的是手指捏合的抓取方式,比较适合抓取一些小物件,当我们的手指靠近可抓取物体时,可以激活Pinch Grab,进入准备抓取的阶段,也就是 Hover 状态。然后捏合手指进行抓取,进入 Select 状态。
而 Palm Grab 是当手掌靠近可抓取物体的时候激活。
此外,我们还可以为 Hand Grab 制作抓取手势。
如果没有抓取手势,虚拟的手会与物体发生穿模,这种情况适用于抓取一些非实体化的物体,比如魔法球。
如果需要抓取手势,因为在现实中我们抓取不同物体可能会有不同的抓取手势,那么在虚拟世界中,我们也可以根据不同形状的物体设置相应的抓取点,为抓取点配备抓取手势,让虚拟的手在抓取不同物体后能够呈现出不同的抓取姿态。
我们可以找到 Oculus Integration 官方提供的 Hand Grab 示例场景,在 Assets/Oculus/Interaction/Samples/Scenes/Examples 文件夹下的 Hand Grab Examples 场景:


上图中的几个样例就来自于Hand Grab Examples 场景。
- 最左边的例子是没有抓取手势的,我们可以用任意姿势,任意根手指进行抓取。
- 中间的钥匙是 Pinch Grab 的例子,实际上我们可以规定哪几根手指能够触发 Pinch Grab,而这个钥匙规定了拇指和食指能够触发,当我们的拇指和食指靠近钥匙时,就会激活 Pinch Grab 的 Hover 状态,然后捏合拇指和食指就能将钥匙抓到手上。但是如果我们用拇指和中指去捏合,或者将手掌靠近钥匙尝试抓取,都是抓不起来的。
- 右边的火炬是 Palm Grab 的例子,当我们用手掌靠近火炬,就能进入 Palm Grab 的 Hover 状态,但是如果只用手指去靠近,是无法激活的。

然后官方示例场景还有一个杯子的例子(如上图所示),这个杯子使用的是混合抓取,它既支持 Pinch Grab,Palm Grab。并且杯子上设置了三个抓取点,每一个抓取点配备了不同的抓取姿势。
⭐Touch Hand Grab
https://developer.oculus.com/documentation/unity/unity-isdk-touch-hand-grab-interaction/
这种方式可以在物体表面上的任意位置进行抓取。(准确来说是物体的碰撞体,当物体的碰撞体和物体的表面贴合的时候,视觉效果就和抓在物体表面上一样),接下来我先假设物体的碰撞体和它的表面贴合,那么抓取时手指会贴在物体表面上,并且我们可以用任意数量的手指进行抓取,用任意的手势抓在物体的表面(碰撞体)上。这种方式相比于 Hand Grab,它的抓取手势更加自由。因为在有抓取手势的 Hand Grab 中,我们需要为物体设置抓取点,然后为每一个抓取点制作对应的抓取手势。但是在 Touch Hand Grab 中,物体表面(碰撞体)上的任意位置都可以成为抓取点,不用我们手动设置抓取点在什么地方,并且抓取手势会符合我们手指贴在物体表面的位置。
我们可以体验 Assets/Oculus/Interaction/Samples/Scenes/Examples 文件夹下的 Touch Grab Examples 场景。


这看起来是不是比 Hand Grab 方便多了?但这也不是说 Hand Grab 一无是处,在一些需要呈现精准抓取手势或者固定某几个抓取手势的场合中,就需要用到 Hand Grab

比如上图中的手枪模型,我希望每次抓取的时候都能呈现出如上图所示的抓取姿势,让中指,无名指,小拇指贴在握把上,食指贴在扳机上,做出准备开枪的姿势。大家观察一下枪的碰撞体,也就是枪模型上绿色的区域,可以看到枪的扳机这一块区域是没有碰撞体的(如下图所示)

那么如果使用的是 Touch Hand Grab,食指就贴不到扳机上,因为这一块区域没有碰撞体。但是如果使用的是 Hand Grab,我们可以在枪的握把上设置一个抓取点,然后配备如上图所示的抓取姿势,这样每次抓取的时候就能够呈现出我们准备好的抓取手势。
⭐Distance Hand Grab
https://developer.oculus.com/documentation/unity/unity-isdk-distance-hand-grab-interaction/
这种方式就是在远处通过射线抓取物体,可以将远处的物体抓取到手上,或者在远距离操控物体移动。
我们可以体验 Assets/Oculus/Interaction/Samples/Scenes/Examples 文件夹下的 Distance Grab Examples 场景。


相关文章:
Unity Meta Quest 一体机开发(五):手势抓取概述
文章目录 📕教程说明📕 Oculus Integration 中的三种手势抓取方式⭐Hand Grab⭐Touch Hand Grab⭐Distance Hand Grab 此教程相关的详细教案,文档,思维导图和工程文件会放入 Seed XR 社区。这是一个高质量知识星球 XR 社区&#…...
传输层中的TCP和UPD协议
一)应用层协议简介:根据需求明确要传输的信息,明确要传输的数据格式; 应用层协议:这个协议,实际上是和程序员打交道最多的协议了 1)其它四层都是操作系统,驱动,硬件实现好了的,咱们是不需要管 2)应用层:当我…...
插入排序算法(C++版)
1、什么是插入排序 插入排序(Insertion Sort)是一种简单直观的排序算法,它的基本思想是将一个待排序的数组分为已排序和未排序两个部分,然后逐步将未排序的元素插入到已排序的部分,直到整个数组有序。 2、插入排序的…...
Tracking vs. No-Tracking Queries
学习链接 Tracking queries By default, queries that return entity types are tracking. A tracking query means any changes to entity instances are persisted by SaveChanges. var blog context.Blogs.SingleOrDefault(b > b.BlogId 1); blog.Rating 5; contex…...
Centos7安装frps实现内网穿透
前提 公网设备:云服务器1台,带公网IP 内网设备:linux、群晖、openwrt都可以 我的环境: 云服务器:centos7.9 内网:openwrt软路由 防火墙&&安全组 关闭云服务器的防火墙: 关闭防火墙…...
cryptopp Base64Encoder \n问题
1、问题: new Base64Encoder(new StringSink(out_base)) 调用库函数Base64Encoder进行base64加密后确认多出来了\n 2、原因 base64加密的问题, 由于base64一行不能超过76字符, 超过就会添加回车换行符(在Windows中是 \r\n , 在Linux中是 \n ) 3、解决 方法一、给定参…...
一种艺术风格的神经算法:总结与实现
一、说明 神经风格或神经转移允许以新的艺术风格再现给定的图像。在这里,我介绍了 Leon A. Gatys、Alexander S. Ecker 和 Matthias Bethge 提出的神经风格算法。该算法接收样式图像、内容图像和输入图像,输入图像可以是空的白色图像,也可以是内容图像的副本。因此,…...
【Mysql系列】Mysql基础篇
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
C++面试题之C++中的指针参数传递和引用参数传递
在C中,可以使用指针参数传递和引用参数传递来将参数传递给函数。这两种方法都可以修改函数外部的变量。 指针参数传递: 当使用指针参数传递时,函数接收一个指向变量的指针作为参数。在函数内部,通过解引用指针来访问和修改原始变量的值。这种…...
[Android]Unresolved reference: appcompat
问题 我创建了一个Kotlin class,然后导入并同步了依赖 implementation("androidx.appcompat:appcompat:1.6.1”),但Class中还是提示报错还是提示Unresolved reference: appcompat 。 代码如下: package com.example.gatestdemol imp…...
网络运维Day14
监控概述 监控的目的 报告系统运行状况每一部分必须同时监控内容包括吞吐量、反应时间、使用率等提前发现问题进行服务器性能调整前,知道调整什么找出系统的瓶颈在什么地方 监控的资源类别 公开数据 Web、FTP、SSH、数据库等应用服务TCP或UDP端口 私有数据 CPU、内…...
Mac常用软件安装
brew安装 brew 是从下载源码解压然后 ./configure && make install ,同时会包含相关依存库。并自动配置好各种环境变量,而且易于卸载。 这个对程序员来说简直是福音,简单的指令,就能快速安装和升级本地的各种开发环境。 …...
node 文件上传操作(前端 form表单上传 formData上传 后端 node 使用express+multer)
目录 前端form表单上传formData上传 后端 node 使用expressmulter 前端 form表单上传 <h1>个人信息</h1><form action"http://localhost:3000/api/sendFile" method"post" enctype"multipart/form-data"><label for"…...
容器数据卷+MYSQL实战
什么是容器数据卷? 让我们回忆一下docker理念: 就是将应用和环境打包成一个镜像 数据? 如果数据都在容器中,那么我们删除容器,数据就会丢失 !需求:数据持久化就完美了 对于MYSQL࿰…...
开发者测试2023省赛--UnrolledLinkedList测试用例
测试结果 官方提交结果 EclEmma PITest 被测文件UnrolledLinkedList.java /** This source code is placed in the public domain. This means you can use it* without any restrictions.*/package net.mooctest;import java.util.AbstractList; import java.util.Collectio…...
HoudahGeo 6 for Mac:掌控地理位置信息的强大工具
在当今这个信息化的世界,地理位置信息的重要性日益凸显。无论是在工作、学习还是生活中,我们都需要理解和利用地理位置信息。如果你正在寻找一个能帮助你更好地管理和理解地理位置信息的工具,那么HoudahGeo 6 for Mac是一个值得考虑的选择。 …...
Xilinx Artix7-100T低端FPGA解码MIPI视频,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持
目录 1、前言免责声明 2、我这里已有的 MIPI 编解码方案3、本 MIPI CSI2 模块性能及其优缺点4、详细设计方案设计原理框图OV5640及其配置权电阻硬件方案MIPI CSI-2 RX SubsystemSensor Demosaic图像格式转换Gammer LUT伽马校正VDMA图像缓存AXI4-Stream toVideo OutHDMI输出 5、…...
C与汇编深入分析
汇编怎么调用C函数 直接调用 BL main传参数 在arm中有个ATPCS规则(ARM-THUMB procedure call standard)(ARM-Thumb过程调用标准)。 约定r0-r15寄存器的用途: r0-r3:调用者和被调用者之间传递参数r4-r11…...
MySQL中外键的使用及外键约束策略
一、外键约束的概念 外键约束(FOREIGN KEY,缩写FK是数据库设计的一个概念,它确保在两个表之间的关系保持数据的一致性和完整性。 外键是指表中的某个字段的依赖于另一张表中某个字段的值,而被依赖的字段必须具有主键约束或者唯一约束&#…...
Home Assistant使用ios主题更换背景
Home Assistant使用ios主题、更换背景 lovelace-ios-dark-mode-theme 默认前置情况,1、已安转HACS插件2、搜索安装 IOS Dark Mode Theme1)第一、二步应该很容易实现,configuration.yaml文件很容易被找到2)而本人在进行第三步操作时…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
