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

文章目录

  • 📕教程说明
  • 📕玩家物体配置 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.hqwc.cn/news/196007.html

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

相关文章

计算机网络期末复习(知识点)

一、计算机网络体系结构 计算机网络&因特网: 计算机网络定义:将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络关联软件及网络协议的管理和协调下,实…

WSL 2 更改默认安装的 Linux 发行版

目录 什么是 WSL 2?更改默认安装的 Linux 发行版更改发行版的 WSL 版本 什么是 WSL 2? WSL 2 是适用于 Linux 的 Windows 子系统体系结构的一个新版本,它支持适用于 Linux 的 Windows 子系统在 Windows 上运行 ELF64 Linux 二进制文件。 它的…

动态规划专项---最长上升子序列模型

文章目录 怪盗基德的滑翔翼登山合唱队形友好城市最大上升子序列和拦截导弹导弹防御系统最长公共上升子序列 一、怪盗基德的滑翔翼OJ链接 本题思路:本题是上升子序列模型中比较简单的模型&#xff0c;分别是从前往后和从后往前走一遍LIS即可。 #include <bits/stdc.h>co…

ARouter出现 there‘s no route matched in group问题排查

在使用ARouter时候会出现找不到映射路径的问题&#xff0c;这里给兄弟们总结下踩过的坑 所有用到的模块都要有填写依赖 android {defaultConfig {......javaCompileOptions {annotationProcessorOptions {arguments [AROUTER_MODULE_NAME: project.getName()]}}} } ... depe…

腾讯云轻量数据库性能如何?轻量数据库租用配置价格表

腾讯云轻量数据库测评&#xff0c;轻量数据库100%兼容MySQL 5.7和8.0&#xff0c;腾讯云提供1C1G20GB、1C1G40GB、1C2G80GB、2C4G120GB、2C8G240GB五种规格轻量数据库&#xff0c;腾讯云百科txybk.com分享腾讯云轻量数据库测评、轻量数据库详细介绍、特性、配置价格和常见问题解…

JavaScript的学习,就这一篇就OK了!(超详细)

目录 Day27 JavaScript(1) 1、JS的引入方式 2、ECMAScript基本语法 3、ECMAScript 基本数据类型​编辑 3.1 数字类型 3.2 字符串 3.3 布尔值 3.4 空值&#xff08;Undefined和Null&#xff09; 3.5 类型转换 3.6 原始值和引用值 4、运算符 5、流程控制语句 5.1 分…

【Android】Android Framework系列--CarUsbHandler源码分析

Android Framework系列–CarUsbHandler源码分析 本文基于Android12源码。 CarUsbHandler是Android Car提供的服务之一&#xff0c;其用车载USB连接的场景。 车载USB有其特殊应用场景&#xff0c;比如AndroidAuto、CarLife等。而Android的做法是在其原有的USB服务上&#xff0…

【信息安全】浅谈SQL注入攻击的概念、原理和防范措施:简单分析六种常见攻击方式

用户登录 在开发Web应用程序时&#xff0c;用户登录是一个非常常见的功能。然而&#xff0c;不安全的用户登录功能可能会导致安全漏洞&#xff0c;例如SQL注入和跨站脚本攻击。 SQL注入 SQL注入是一种常见的攻击技术&#xff0c;攻击者通过在用户输入的数据中插入恶意SQL代码…

Jmeter做接口测试

1.Jmeter的安装以及环境变量的配置 Jmeter是基于java语法开发的接口测试以及性能测试的工具。 jdk&#xff1a;17 (最新的Jeknins&#xff0c;只能支持到17) jmeter&#xff1a;5.6 官网&#xff1a;http://jmeter.apache.org/download_jmeter.cgi 认识JMeter的目录&#xff1…

华为麒麟服务器--硬盘问题

记录以下今天处理的服务器&#xff1a; 情况说明&#xff1a;linux 系统&#xff0c;不知道什么原因系统就突然不能用了&#xff08;据说是前段时间断电来着&#xff0c;但是机房有应急电源&#xff09;。 系统环境&#xff1a; 服务器&#xff1a;华为RH2288H V3 服务器 服…

leetcode刷题日志-68.文本左右对齐

给定一个单词数组 words 和一个长度 maxWidth &#xff0c;重新排版单词&#xff0c;使其成为每行恰好有 maxWidth 个字符&#xff0c;且左右两端对齐的文本。 你应该使用 “贪心算法” 来放置给定的单词&#xff1b;也就是说&#xff0c;尽可能多地往每行中放置单词。必要时可…

C++学习笔记(11)——类,友元类、内部类、匿名对象、优化

系列文章目录 C学习笔记 C学习笔记&#xff08;1&#xff09;——C的诞生C学习笔记&#xff08;3&#xff09;——缺省函数与函数重载C学习笔记&#xff08;4&#xff09;——引用C学习笔记(5)——inline内联C学习笔记&#xff08;6&#xff09;——auto关键字C学习笔记&…