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

相关文章

基于Python开发PPTX压缩工具

《基于Python开发PPTX压缩工具》在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,不便于传输和存储,所以本文将使用Python开发一个PPTX压缩工具,需要的可以了解下... 目录引言全部代码环境准备代码结构代码实现运行结果引言在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

SpringBoot如何使用TraceId日志链路追踪

《SpringBoot如何使用TraceId日志链路追踪》文章介绍了如何使用TraceId进行日志链路追踪,通过在日志中添加TraceId关键字,可以将同一次业务调用链上的日志串起来,本文通过实例代码... 目录项目场景:实现步骤1、pom.XML 依赖2、整合logback,打印日志,logback-sp

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

C#图表开发之Chart详解

《C#图表开发之Chart详解》C#中的Chart控件用于开发图表功能,具有Series和ChartArea两个重要属性,Series属性是SeriesCollection类型,包含多个Series对... 目录OverviChina编程ewSeries类总结OverviewC#中,开发图表功能的控件是Char

鸿蒙开发搭建flutter适配的开发环境

《鸿蒙开发搭建flutter适配的开发环境》文章详细介绍了在Windows系统上如何创建和运行鸿蒙Flutter项目,包括使用flutterdoctor检测环境、创建项目、编译HAP包以及在真机上运... 目录环境搭建创建运行项目打包项目总结环境搭建1.安装 DevEco Studio NEXT IDE

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类