Unity Meta Quest 一体机开发(十一):【手势追踪】远距离抓取

文章目录

  • 📕教程说明
  • 📕玩家配置 DistanceHandGrabInteractor
  • 📕物体配置 DistanceHandGrabInteractable
  • 📕调整物体飞向手部的速度
  • 📕调整探测物体的范围
    • ⭐HandFrustumNarraw
    • ⭐HandFrustumWide
    • ⭐HeadFrustum

此教程相关的详细教案,文档,思维导图和工程文件会放入 Spatial XR 社区。这是一个高质量 XR 社区,博主目前在内担任 XR 开发的讲师。此外,该社区提供教程答疑、及时交流、进阶教程、外包、行业动态等服务。

社区链接:
Spatial XR 高级社区(知识星球)
Spatial XR 高级社区(爱发电)

在这里插入图片描述


📕教程说明

这篇教程将会介绍如何用 Meta 的 Interaction SDK,将远处的物体抓取到手上。

环境配置可参考:https://blog.csdn.net/qq_46044366/article/details/133967343

配置一个基本的玩家物体可以参考前几期教程:https://blog.csdn.net/qq_46044366/article/details/134097455

系列教程专栏:https://blog.csdn.net/qq_46044366/category_12118293.html

配套的视频链接:
11.如何用VR手势追踪远距离抓取以及交互

​电脑操作系统: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/

远距离抓取脚本介绍文档:
https://developer.oculus.com/documentation/unity/unity-isdk-distance-hand-grab-interaction/

远距离抓取配置过程文档:https://developer.oculus.com/documentation/unity/unity-isdk-create-distance-grab-interactions/

最终实现的效果:

在这里插入图片描述


📕玩家配置 DistanceHandGrabInteractor

在 Unity 编辑器的 Project 窗口栏中搜索 DistanceHandGrabInteractor 物体:

在这里插入图片描述
将这个 Prefab 拖到场景中,作为玩家物体上 HandInteractorsLeft 和 HandInteractorsRight 物体的子物体:

在这里插入图片描述

点击 DistanceHandGrabInteractor 物体,将玩家物体上的 OVRHmd 物体拖到 HmdRef 脚本中的 Hmd 变量上:

在这里插入图片描述

展开 DistanceHandGrabInteractor,激活 Visuals 子物体下的 HandGrabVisual 和 HandGrabGlow 物体:

在这里插入图片描述

点击 HandGrabVisual 物体,将对应手部的 Synthetic Hand 进行赋值:

在这里插入图片描述

点击 HandGrabGlow 物体,按下图所示进行赋值,另一只手同理:

在这里插入图片描述
在玩家物体的 LeftHand 和 RightHand 下添加 HandVelocityCalculator Prefab,然后引用到 DistanceHandGrabInteractor 脚本中的 Velocity Calculator 中

在这里插入图片描述

在这里插入图片描述

📕物体配置 DistanceHandGrabInteractable

接下来,我将配置一个具有物理碰撞效果和自定义抓取手势的物体。

首先物体的身上需要有碰撞体,刚体,Grabbable 脚本,Physics Grabbable 脚本。

在这里插入图片描述

然后为物体录制抓取手势,可以参考这期教程:Unity Meta Quest 一体机开发(九):【手势追踪】通过录制抓取手势实现自定义抓取姿势

录好手势后找到物体的 HandGrabPose 子物体,修改手指的自由度(我这里将所有手指的自由度改为了 Locked):

在这里插入图片描述

然后在物体的 HandGrabInteractable 子物体上添加 DistanceHandGrabInteractable 脚本,将物体身上的 Physics Grabbable 脚本拖到 DistanceHandGrabInteractable 脚本的 Physics Grabbable 变量上:

在这里插入图片描述

📕调整物体飞向手部的速度

在 HandGrabInteractable 物体上添加 Move Towards Target Provider 脚本,然后将脚本拖到 DistanceHandGrabInteractable 脚本的 Movement Provider 变量上:

在这里插入图片描述

修改 Travel Speed 可以修改物体飞向手部的速度。Travel Speed 越大,物体飞向手部所花的时间越长

📕调整探测物体的范围

DistanceHandGrabInteractor 会有自己的探测范围,在范围内的物体才能够触发远距离抓取。

我们找到玩家身上的 DistanceHandGrabInteractor 脚本:

在这里插入图片描述
默认引用了三个 Frustum,我们可以定位到这三个 Frustum 的位置:

在这里插入图片描述

⭐HandFrustumNarraw

在这里插入图片描述

HandFrustumNarraw 被赋给了 Selection Frustum 变量,表示的是远距离抓取的探测范围,会从手部发出一个锥体的探测范围,在此范围内的物体会被选中,有资格触发远距离抓取。最靠近范围中心的物体会被选中。调整 Conical Frustom 脚本的参数可以修改探测范围。

在这里插入图片描述

⭐HandFrustumWide

同样是从手部发出一个锥体范围,但是范围比 Narraw 更大。如果 HandFrustumWide 被赋给了 Deselection Frustum 变量,当物体被选中后,必须要退出 HandFrustumWide 的范围才能视为取消选中,而不是退出 Narraw 的范围。

在这里插入图片描述

⭐HeadFrustum

头部发出一个锥体范围。如果 HeadFrustum 被赋给了 Aid Frustum 变量,当物体同时进入到 Aid Frustum 和 Selection Frustum 的范围内,才能被选中。也就是说我们要用手对准可抓取物体,并且看向可抓取物体时,如果物体同时进入到了这两个范围内,才能触发远距离抓取。

在这里插入图片描述

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

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

相关文章

camunda流程引擎——Java集成Camunda(上)(笔记)

目录 一、以一个处理流程开始1.1 后端1.2 前端1.3 执行 二、Camunda的补充2.1 使用方式2.2 可视化平台的Cockpit2.3 流程相关数据2.4 表介绍2.5 前端集成Modeler 三、用Java集成Camunda3.1 集成配置3.2 自动部署3.2.1 修改process.xml位置3.2.2 多进程引擎配置与多租户 3.3 历史…

电源测试系统 | 自动化测试体现在哪?有什么特点?

一、背景 随着电源设计研发技术的不断发展,对电源性能以及质量的要求越来越高,传统手动测试以及传统自动化测试方法已经无法满足测试需求,弊端日渐显露: 1. 手动测试过程繁琐、信息零散、难以有效的控制与监测,且人工成…

strtok()的用法及实现哦

1. 用法 1. 声明:char *strtok(char *str, const char *delim) str -- 要被分解成一组小字符串的字符串。第一次调用 strtok() 时,这个参数应该是你想要分割的字符串。随后的调用应该将此参数设置为NULL,以便继续从上次的位置分割。delim -- …

每日一题SQL

以下题目来源微信公众号【SQL数据库开发】 1、编写一个 SQL 查询来实现分数排名。如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔…

【Qt QML 入门】TextField

TextField 是一个单行文本编辑器,它继承自TextInput,具备TextInput的所有功能,同时扩展了 TextInput 并增加了占位符文本功能和装饰选项。 自定义文本输入框: import QtQuick import QtQuick.Window import QtQuick.ControlsWindo…

OpenCvSharp从入门到实践-(07)绘制图形

目录 1、线段的绘制 1.1实例1-绘制线段拼成一个"王"字 2、矩形的绘制 2.1实例2-绘制一个矩形边框 2.2实例3-绘制一个实心矩形 3、圆的绘制 3.1实例4-绘制"交通灯" 4、多边形绘制 4.1实例5-绘制等腰梯形 5、文字的绘制 5.1实例6-绘制文字OpenCvS…

YB1161是一款高效同步升压转换器低至1pA的超低静态电流。

简介: YB1161是一款高效同步升压转换器低至1pA的超低静态电流。它能够从低电压源输送至少2W的功率,即。5V输出时为0.4A。它还具有真正的关闭功能在关闭和输出期间断开输入和输出短路条件。这消除了对外部MOSFET及其控制电路,用于断开输入输出…

亚信科技AntDB数据库——深入了解AntDB-M元数据锁的实现(二)

5.5 防止低优先级锁饥饿 AntDB-M按照优先级将锁又分了两类,用于解决低优先级锁饥饿问题。 ●独占型(hog): X, SNRW, SNW; 具有较强的不兼容性,优先级高,容易霸占锁,造成其他低优先级锁一直处于等待状态。 ●暗弱型(piglet): SW; …

Vue3报错: ‘defineProps‘ is not defined,解决方法

问题出现: 今天在使用 <script setup>组合式 API 的语法糖的时候&#xff0c;定义defineProps时候报错&#xff1a; ‘defineProps’ is not defined 查了一下资料&#xff0c;这是因为eslint的语法校验导致的问题。 解决方法1&#xff1a; 在项目根目录的文件.eslin…

【Linux | Docker】内网穿透实现远程访问Nginx Proxy Manager

文章目录 前言1. docker 一键安装2. 本地访问3. Linux 安装cpolar4. 配置公网访问地址5. 公网远程访问6. 固定公网地址 前言 Nginx Proxy Manager 是一个开源的反向代理工具&#xff0c;不需要了解太多 Nginx 或 Letsencrypt 的相关知识&#xff0c;即可快速将你的服务暴露到外…

Python+reuqests自动化接口测试

1.最近自己在摸索Pythonreuqests自动化接口测试&#xff0c;要实现某个功能&#xff0c;首先自己得有清晰的逻辑思路&#xff01;这样效率才会很快&#xff01; 思路--1.通过python读取Excel中的接口用例&#xff0c;2.通过python的函数调用&#xff0c;get/Post 进行测试&…

如何培养孩子的自信心

当谈论培养孩子的自信心时&#xff0c;许多家长可能会感到困惑。自信心是一个孩子成长过程中非常重要的品质&#xff0c;它可以帮助孩子在面对挑战时更加勇敢和坚定。那么&#xff0c;如何培养孩子的自信心呢&#xff1f;以下是一些建议&#xff0c;希望能对您有所帮助。 鼓励孩…