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

本文主要是介绍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 的范围内,才能被选中。也就是说我们要用手对准可抓取物体,并且看向可抓取物体时,如果物体同时进入到了这两个范围内,才能触发远距离抓取。

在这里插入图片描述

这篇关于Unity Meta Quest 一体机开发(十一):【手势追踪】远距离抓取的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/499225

相关文章

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

MySQL追踪数据库表更新操作来源的全面指南

《MySQL追踪数据库表更新操作来源的全面指南》本文将以一个具体问题为例,如何监测哪个IP来源对数据库表statistics_test进行了UPDATE操作,文内探讨了多种方法,并提供了详细的代码... 目录引言1. 为什么需要监控数据库更新操作2. 方法1:启用数据库审计日志(1)mysql/mariad

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

HTML中meta标签的常见使用案例(示例详解)

《HTML中meta标签的常见使用案例(示例详解)》HTMLmeta标签用于提供文档元数据,涵盖字符编码、SEO优化、社交媒体集成、移动设备适配、浏览器控制及安全隐私设置,优化页面显示与搜索引擎索引... 目录html中meta标签的常见使用案例一、基础功能二、搜索引擎优化(seo)三、社交媒体集成四、移动

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件