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)而本人在进行第三步操作时…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...

蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...