Unity Meta Quest 一体机开发(七):配置玩家 Hand Grab 功能

news2024/9/24 5:21:59

文章目录

  • 📕教程说明
  • 📕玩家物体配置 Hand Grab Interactor
    • ⭐添加 Hand Grab Interactor 物体
    • ⭐激活 Hand Grab Visual 和 Hand Grab Glow
    • ⭐更新 Best Hover Interactor Group
  • 📕配置可抓取物体(无抓取手势)
    • ⭐刚体和碰撞体
    • ⭐Grabbable 脚本
      • 🔍Transfer On Second Selection
      • 🔍Transformer 脚本
        • ⚡OneGrabFreeTransformer
        • ⚡OneGrabRotateTransformer
        • ⚡OneGrabTranslateTransformer
        • ⚡TwoGrabFreeTransformer
    • ⭐添加 Hand Grab Interactable 物体
    • ⭐让物体在进入不同状态下变色

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

知识星球链接:Seed XR 高级社区

在这里插入图片描述


📕教程说明

上期教程我们介绍了 Meta XR SDK 中 Hand Grab 交互中的重要知识点,这篇教程将会介绍如何将 Hand Grab 交互应用到我们自己的项目中。

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

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

配套的视频链接:
上半部分:2023 VR+MR全硬件开发教程】七(上半)、V59新版本说明以及配置手追交互(主讲:YY)
下半部分将在 Seed XR 社区分享。

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

HandGrab 知识点:https://developer.oculus.com/documentation/unity/unity-isdk-hand-grab-interaction/

配置 Hand Grab Interaction:https://developer.oculus.com/documentation/unity/unity-isdk-create-hand-grab-interactions/


📕玩家物体配置 Hand Grab Interactor

⭐添加 Hand Grab Interactor 物体

在 Project 窗口中搜索 Hand Grab Interactor 这个 Prefab:

在这里插入图片描述

将它拖到场景中,分别作为 HandInteractorsLeft 和 HandInteractorsRight 的子物体:

在这里插入图片描述

⭐激活 Hand Grab Visual 和 Hand Grab Glow

激活 Hand Grab Interactor 下的 Hand Grab Visual 和 Hand Grab Glow 子物体(左右手都需要):

在这里插入图片描述

将对应手的 Synthetic Hand 拖到 Hand Grab State Visual 脚本的 Synthetic Hand 变量上:

在这里插入图片描述
对 Hand Grab Glow 脚本上的 Hand Renderer,Material Editor 和 Hand Visual 变量进行赋值:

在这里插入图片描述

⭐更新 Best Hover Interactor Group

在 HandInteractorsLeft 和 HandInteractorsRight 物体上分别有一个 Best Hover Interactor Group 脚本,我们需要把对应的 HandGrabInteractor 拖到 Interactors 中

在这里插入图片描述
Best Hover Interactor Group是 Interactor Group 的其中一种。
只要是个Interactor Group,它就会保证所有添加进 Interactor Group的Interactor,在同一时刻只能有一个Interactor在交互。当其中一个 Interactor 在交互的时候,Group 里面的其他 Interactor 会暂时失活,无法与对应的 Interactable 交互,等到当前正在运作的 Interactor 停止交互后,其他的 Interactor 才会被激活。

在 Interactor 开始交互,也就是进入到 Select 状态之前,要先进入 Hover 状态,也就是准备交互的阶段。而这个 BestHoverInteractorGroup 有它自己的特性,就是能够保证优先级高的 Interactor 进入到 Hover 状态,然后优先级低的 Interactor 会暂时失活默认情况下,Best Hover Interactor Group 中的 Interactors 列表元素中越靠前的拥有越高的优先级。也就是说列表中第一个Interactor 优先级最高,然后优先级往下递减。

在这里插入图片描述
比如上面这张图,这个是右手上的 Best Hover Interactor Group,在 Group 中 HandGrabInteractor 排在 HandRayInteractor(实现的是射线交互)前面,那么对于右手来说,当 HandGrabInteractor 和 HandRayInteractor 同时满足进入 Hover 的条件时,因为 HandGrabInteractor 会比 HandRayInteractor 优先进入 Hover,所以 HandRayInteractor 会暂时失活,等到 HandGrabInteractor 取消了 Hover 状态且 HandRayInteractor 仍满足 Hover 状态条件时,HandRayInteractor 才会进入到 Hover 状态。


📕配置可抓取物体(无抓取手势)

⭐刚体和碰撞体

在可抓取物体身上添加刚体和碰撞体。

在这里插入图片描述

我这边将碰撞体设为了 Is Trigger,将刚体 Rigidbody 的 Use Gravity 取消,让物体不具有物理效果,如果想要添加物理效果,需要添加额外的一些脚本,这个会在后续教程中介绍。

⭐Grabbable 脚本

官方文档:https://developer.oculus.com/documentation/unity/unity-isdk-grabbable/

在可抓取物体身上添加 Grabbable 脚本。

在这里插入图片描述

🔍Transfer On Second Selection

如果将 Grabbable 脚本上的 Transfer On Second Selection 勾选上,就能够实现左右手的交替抓取。比如我的右手正在抓取这个方块,这个时候我保持右手的抓取,然后用左手去抓取这个方块。那么我的左手会接替方块的控制权,右手则自动取消对这个方块的抓取。

🔍Transformer 脚本

在 Grabbable 脚本的 Optionals 下有一个 One Grab Transformer 和 Two Grab Transformer 变量。如果没有对这两个变量赋值,程序运行后默认会给物体添加一个 One Grab Free Transformer 脚本,然后引用到 One Grab Transformer 变量上。

Grabbable 脚本可以通过 Transformer 类型的脚本控制可抓取物体的移动,旋转或缩放。One Grab Transformer 可以通过一只手控制物体,Two Grab Transformer 需要同时用上两只手控制物体。

下面介绍一些常见的 One Grab Transformer 和 Two Grab Transformer:

在这里插入图片描述

我们可以手动在物体上添加 Transformer 相关的脚本,然后记得将它引用到 Grabbable 脚本上的 One Grab Transformer 或 Two Grab Transformer 处:

在这里插入图片描述

⚡OneGrabFreeTransformer

能用一只手控制物体的移动和旋转。

⚡OneGrabRotateTransformer

能用一只手控制物体的旋转,可设置 Rotation Axis 限定物体能绕哪个轴旋转。

⚡OneGrabTranslateTransformer

能用一只手控制物体的移动。

⚡TwoGrabFreeTransformer

能用两只手控制物体的移动,旋转和缩放。如果我们用了 Two Grab Transformer,需要将 Grabbable 脚本上的 Transfer On Second Selection 取消勾选,因为勾选上实现的是左右手交替抓取,无法支持两只手同时抓取。

如果想要让一个物体既能通过一只手抓取,也能用两只手同时操作,我们需要给 One Grab Transformer 和 Two Grab Transformer 都赋值:

在这里插入图片描述

⭐添加 Hand Grab Interactable 物体

我们在 Project 窗口的搜索栏中搜索 HandGrabInteractable 物体,将它拖到场景中,作为可抓取物体的子物体。

在这里插入图片描述
在这里插入图片描述

⭐让物体在进入不同状态下变色

我们可以在可抓取物体下添加一个子物体,专门用来负责视觉效果:

在这里插入图片描述
在 Visuals 物体上添加 Interactable Color Visual,Material Property Block Editor 和 Interactable Group View 脚本:

在这里插入图片描述
将物体的 Mesh Renderer 拖到 Material Property Block Editor 的 Renderers 下:

在这里插入图片描述

将 HandGrabInteractable 拖到 Interactable Group View 的 Interactables 下:

在这里插入图片描述

将 Material Property Block Editor 和 Interactable Group View 脚本拖到 Interactable Color Visual 脚本的对应位置:
在这里插入图片描述

默认情况下,物体进入 Hover 状态会变成蓝色,进入到 Select 状态会变成绿色。我们可以自行修改颜色。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法】树形DP③ 监控二叉树 ⭐(二叉树染色二叉树灯饰)!

文章目录 前期知识 & 相关链接例题968. 监控二叉树解法1——标记状态贪心解法2——动态规划 相关练习题目P2458 [SDOI2006] 保安站岗⭐(有多个儿子节点)🚹LCP 34. 二叉树染色⭐(每个节点 单独dp[k 1]数组)LCP 64.…

时间序列预测实战(十七)利用Prophet实现电力负荷长期预测(附代码+数据集+详细讲解)

一、本文介绍 Prophet是一个由Facebook开发的开源工具,用于时间序列预测。这个工具特别适合于具有强季节性影响和多个历史数据季节的业务时间序列数据。Prophet的主要思想是将数据分解为如下三个部分:趋势、季节性、节假日和特殊事件。这个模型非常适合…

GIT无效的源路径/URL

ssh-add /Users/haijunyan/.ssh/id_rsa ssh-add -K /Users/haijunyan/.ssh/id_rsa

SQL基础理论篇(七):多表关联的连接算法

文章目录 简介Nested LoopsMerge JoinHash Join总结参考文献 简介 多表之间基础的关联算法一共有三种: Hash JoinNested LoopsMerge Join 还有很多基于这三种基础算法的变体,以Nested Loops为例,就有用于in和exist的半连接(Nes…

【Android Jetpack】Hilt的理解与浅析

文章目录 依赖注入DaggerHiltKoin添加依赖项Hilt常用注解的含义HiltAndroidAppAndroidEntryPointInjectModuleInstallInProvidesEntryPoint Hilt组件生命周期和作用域如何使用 Hilt 进行依赖注入 本文只是进行了简单入门,博客仅当做笔记用。 依赖注入 依赖注入是一…

文档向量化工具(一):Apache Tika介绍

Apache Tika是什么?能干什么? Apache Tika是一个内容分析工具包。 该工具包可以从一千多种不同的文件类型(如PPT、XLS和PDF)中检测并提取元数据和文本。 所有这些文件类型都可以通过同一个接口进行解析,这使得Tika在…

node实战——koa实现文件上传

文章目录 ⭐前言⭐koa实现文件上传⭐foxapi测试⭐总结⭐结束⭐前言 大家好,我是yma16,本文分享关于node实战——node实战——koa实现文件上传。 本文适用对象:前端初学者转node方向,在校大学生,即将毕业的同学,计算机爱好者。 node系列往期文章 node_windows环境变量配置…

Day35力扣打卡

打卡记录 相邻字符不同的最长路径(树状DP) 链接 若节点也存在父节点的情况下,传入父节点参数,若是遍历到父节点,直接循环里 continue。 class Solution:def longestPath(self, parent: List[int], s: str) -> in…

《微信小程序开发从入门到实战》学习二十

3.3 开发创建投票页面 3.3.8 使用icon图标文件 原来已经实现了投票选项的增加和修改功能,现在还差删除。现在为每一个选项增加删除按钮,可以以通过icon图标组件实现。 icon常用属性如下: type icon的类型,有success、s…

Linux虚拟机中网络连接的三种方式

Linux 虚拟机中网络连接的三种方式 先假设一个场景,在教室中有三个人:张三、李四和王五(这三个人每人有一台主机),他们三个同处于一个网段中(192.169.0.XX),也就是说他们三个之间可…

ICASSP2023年SPGC多语言AD检测的论文总结

文章目录 引言正文AbstractRelated ArticleNo.1: CONSEN: COMPLEMENTARY AND SIMULTANEOUS ENSEMBLE FOR ALZHEIMERSDISEASE DETECTION AND MMSE SCORE PREDICTION特征相关模型结构数据处理结果分析 No.2: CROSS-LINGUAL TRANSFER LEARNING FOR ALZHEIMERS DETECTION FROM SPON…

NSS [鹤城杯 2021]Middle magic

NSS [鹤城杯 2021]Middle magic 源码直接给了。 粗略一看&#xff0c;一共三个关卡 先看第一关&#xff1a; if(isset($_GET[aaa]) && strlen($_GET[aaa]) < 20){$aaa preg_replace(/^(.*)level(.*)$/, ${1}<!-- filtered -->${2}, $_GET[aaa]);if(preg_m…

开源与闭源:大模型发展的双重走向

目录 前言开源和闭源的优劣势比较开源的优势闭源的优势 开源和闭源对大模型技术发展的影响对技术发展的影响对数据共享的影响对业务拓展的影响 开源与闭源的商业模式比较开源的商业模式闭源的商业模式 处在大模型洪流中&#xff0c;向何处去&#xff1f;结语 前言 随着人工智能…

【Flink】核心概念:任务槽(Task Slots)

任务槽 每个 worker&#xff08;TaskManager&#xff09;都是一个 JVM 进程&#xff0c;可以在单独的线程中执行一个或多个 subtask。为了控制一个 TaskManager 中接受多少个 task&#xff0c;就有了所谓的 task slots&#xff08;至少一个&#xff09;。 每个任务槽&#xf…

H110主板搭配魔改QNCW升级小记

最近搬家完毕&#xff0c;翻出来一块闲置已久的qncw&#xff0c;隐约记得是买的主板套装&#xff0c;现在主板早已不知踪影&#xff0c;剩下孤零零一个CPU&#xff0c;一起翻出来一个G3900T亮机CPU&#xff0c;应该是同时代的产物。 qncw百度上一搜&#xff0c;发现参数还行&am…

CICD 持续集成与持续交付——jenkins

部署 软件下载&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/ [rootcicd2 ~]# rpm -ivh jdk-11.0.15_linux-x64_bin.rpm[rootcicd2 ~]# yum install -y fontconfig[rootcicd2 ~]# rpm -ivh jenkins-2.432-1.1.noarch.rpm启动服务 [rootcicd2 ~]# systemctl…

【Java】网络编程基础—InetAddress类和URL编程

&#x1f33a;个人主页&#xff1a;Dawn黎明开始 &#x1f380;系列专栏&#xff1a;Java ⭐每日一句&#xff1a;为了那个远方&#xff0c;你要奋不顾身 &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️ 文章目录 一.&#x…

Python编程技巧 – 使用字符串(Strings)

Python编程技巧 – 使用字符串&#xff08;Strings) Python Programming Essentials – Using Strings 本文简要介绍如何使用字符串&#xff0c;来进行Python编程。字符串有很多用途&#xff0c;包括输出结果、反馈状态、数据处理以及切片和文本筛选等 1. 字符串 字符串(St…

DevToys:开发者的多功能瑞士军刀,让编程更高效!

DevToys&#xff1a;开发者的多功能瑞士军刀&#xff0c;让编程更高效&#xff01; DevToys 是一款专为开发者设计的实用工具&#xff0c;它能够帮助用户完成日常的开发任务&#xff0c;如格式化 JSON、比较文本和测试正则表达式&#xff08;RegExp&#xff09;。它的优势在于…

开源WIFI继电器之硬件电路

一、原理图 源文件 二、原理图说明 1、器件说明 U4&#xff1a;ESP8285模块 U6&#xff1a;触发器 U3&#xff1a;继电器 2、继电器状态检测说明 检测继电器线圈是否通电来判断继电器是否导通&#xff0c;当Q1不导通时&#xff0c;Q1集电极的电压为3.3V&#xff0c;经…