当前位置: 首页 > news >正文

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 GrabPalm 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实战

什么是容器数据卷&#xff1f; 让我们回忆一下docker理念&#xff1a; 就是将应用和环境打包成一个镜像 数据&#xff1f; 如果数据都在容器中&#xff0c;那么我们删除容器&#xff0c;数据就会丢失 &#xff01;需求&#xff1a;数据持久化就完美了 对于MYSQL&#xff0…...

开发者测试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:掌控地理位置信息的强大工具

在当今这个信息化的世界&#xff0c;地理位置信息的重要性日益凸显。无论是在工作、学习还是生活中&#xff0c;我们都需要理解和利用地理位置信息。如果你正在寻找一个能帮助你更好地管理和理解地理位置信息的工具&#xff0c;那么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规则&#xff08;ARM-THUMB procedure call standard&#xff09;&#xff08;ARM-Thumb过程调用标准&#xff09;。 约定r0-r15寄存器的用途&#xff1a; r0-r3&#xff1a;调用者和被调用者之间传递参数r4-r11…...

MySQL中外键的使用及外键约束策略

一、外键约束的概念 外键约束&#xff08;FOREIGN KEY,缩写FK是数据库设计的一个概念&#xff0c;它确保在两个表之间的关系保持数据的一致性和完整性。 外键是指表中的某个字段的依赖于另一张表中某个字段的值&#xff0c;而被依赖的字段必须具有主键约束或者唯一约束&#…...

Home Assistant使用ios主题更换背景

Home Assistant使用ios主题、更换背景 lovelace-ios-dark-mode-theme 默认前置情况&#xff0c;1、已安转HACS插件2、搜索安装 IOS Dark Mode Theme1&#xff09;第一、二步应该很容易实现&#xff0c;configuration.yaml文件很容易被找到2&#xff09;而本人在进行第三步操作时…...

Redis 故障排查与应急手册:从理论到实践

Redis 故障排查与应急手册&#xff1a;从理论到实战 场景&#xff1a;线上 Redis 集群出现性能抖动、连接异常、数据丢失等问题时的快速响应指南 一、故障分级与响应策略 在深入技术细节之前&#xff0c;先建立故障分级意识&#xff1a; 级别现象响应时间核心目标P0集群完全不…...

2026 AI 智能体工程化深度解析:从词元逻辑到高可用链路构建

进入 2026 年&#xff0c;大语言模型&#xff08;LLM&#xff09;的竞争已从单纯的“模型智力”转向了“工程化落地能力”。对于开发者而言&#xff0c;AI 不再仅仅是一个对话框&#xff0c;而是一个能够自主调用工具、处理复杂逻辑的智能体&#xff08;Agent&#xff09;。在这…...

现在有开源的最好的矢量动画模型是什么,什么配置的电脑可以部署

目录 一、主流开源矢量动画模型对比 二、电脑配置方案&#xff08;按预算分级&#xff09; 1. 旗舰级&#xff08;稳跑 OmniLottie 高性能&#xff09; 2. 主流级&#xff08;稳跑 AnimateDiff 兼顾通用&#xff09; 3. 入门级&#xff08;轻量应用&#xff09; 三、关…...

从MIMO到相控阵:深入浅出聊聊RFSoC的MTS(多片同步)为啥是5G/雷达系统的核心

从MIMO到相控阵&#xff1a;深入浅出聊聊RFSoC的MTS&#xff08;多片同步&#xff09;为啥是5G/雷达系统的核心 在5G Massive MIMO基站的天线阵列背后&#xff0c;或是军用雷达的相控阵天线系统中&#xff0c;数以百计的射频收发通道需要像精密交响乐团般协同工作——任何微小的…...

BR DI426数字输入模块

B&R DI426 数字输入模块是一款工业自动化系统用的 I/O 模块&#xff0c;主要用于采集现场开关量信号并传输至控制系统。一、基本概述型号&#xff1a;DI426类型&#xff1a;数字输入模块用途&#xff1a;采集工业现场的开关量信号&#xff0c;为控制系统提供输入数据二、主…...

VisualCppRedist AIO:Windows系统运行库的一站式解决方案

VisualCppRedist AIO&#xff1a;Windows系统运行库的一站式解决方案 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist VisualCppRedist AIO是一个开源项目&#x…...

英飞凌TC3XX时钟系统实战:从PLL配置到CCU分频的避坑指南

英飞凌TC3XX时钟系统实战&#xff1a;从PLL配置到CCU分频的避坑指南 在嵌入式系统开发中&#xff0c;时钟系统如同人体的神经系统&#xff0c;为整个芯片提供精准的时序控制和同步信号。作为英飞凌AURIX™系列中的旗舰产品&#xff0c;TC3XX微控制器凭借其高度可配置的时钟架构…...

Apollo6.0 Lattice算法实战解析——从轨迹组合到最优路径生成

1. Lattice算法在Apollo6.0中的核心作用 Lattice算法是Apollo自动驾驶系统中的关键路径规划模块&#xff0c;它负责将横向和纵向轨迹进行智能组合&#xff0c;最终生成安全、舒适且符合交通规则的最优行驶路径。这个算法就像一位经验丰富的导航员&#xff0c;不仅要考虑车辆当前…...

5分钟掌握gInk:让屏幕标注如同纸上书写的终极指南

5分钟掌握gInk&#xff1a;让屏幕标注如同纸上书写的终极指南 【免费下载链接】gInk An easy to use on-screen annotation software inspired by Epic Pen. 项目地址: https://gitcode.com/gh_mirrors/gi/gInk 你是否曾在远程会议中&#xff0c;试图在共享屏幕上圈出重…...

无人机新手必看:Remote ID和ADS-B到底选哪个?从原理到实战全解析

无人机新手必看&#xff1a;Remote ID和ADS-B到底选哪个&#xff1f;从原理到实战全解析 刚入手的无人机在阳光下闪着金属光泽&#xff0c;充电时发出的细微电流声让人心跳加速——直到你发现说明书最后一页印着"需遵守Remote ID或ADS-B监管要求"。这两个陌生术语瞬…...