当前位置: 首页 > news >正文

2025-04-08 NO.4 Quest3 交互教程

文章目录

  • 1 环境准备
  • 2 新手指引:Building Blocks
    • 2.1 创建 OVR 相机
    • 2.2 创建交互功能
    • 2.3 创建交互物体
  • 3 老手开发:Interaction SDK
    • 3.1 创建交互功能
    • 3.2 创建交互物体
  • 4 UI 交互
    • 4.1 3D 按钮
    • 4.2 Unity UI

​ 新版 Meta SDK(v74)优化了 Quest 开发流程,使得原本复杂的开发设置变得简单了许多,这在旧版(v63)是不可想象的!

​ 特此记录。

配置环境:

  • Windows 11
  • Unity 6000.0.42f1
  • Meta SDK v74.0.2
  • Quest3

旧版链接:

  • 2024-04-03 NO.4 Quest3 手势追踪抓取物体(旧)_quest3 手势识别-CSDN博客

  • 2024-04-08 NO.5 Quest3 手势追踪进行 UI 交互(旧)_quest3手势-CSDN博客

  • 2024-04-08 NO.6 Quest3 自定义交互事件(旧)_unity quest3快速配置模型交互-CSDN博客

Quest3 环境配置教程:

  • 2025-03-17 NO.1 Quest3 开发环境配置教程_quest3 unity 开发流程-CSDN博客

1 环境准备

​ 创建新场景 InteractionDemo,删除 Main Camera。

image-20250408050306272

2 新手指引:Building Blocks

​ Building Blocks 是 Meta 推出的 Unity 内置开发教程,通过拖拽的形式快速配置开发环境,并带有错误检查功能。下面我们来看看。

2.1 创建 OVR 相机

​ 选择菜单栏中的“Meta”,依次点击“Tools”->“Building Blocks”。

image-20250408050420020

​ 将 Camera Rig 块拖拽到 Hierarchy 窗口中。

image-20250408050738455

​ 即可创建出 OVR Camera Rig。其名称由 “[BuildingBlock]” 开头,表示由 Building Blocks 创建。

​ 点击该物体,在 Inspector 面板中可看到 BuildingBlock 的介绍,包括:

  • Version:版本
  • Dependencies:该块的依赖。
  • Used by:被 xxx 引用。

​ 此时佩戴 Quest3 运行 Unity,即可看到场景。

image-20250408050902840

2.2 创建交互功能

​ 打开 Building Blocks,选择 “Interaction” 分类,将 “Controller Interactions” 拖拽到 Hierarchy 窗口中。Building Blocks 会自动为我们创建 Interaction 模块,包括 OVRHmd 和 Controller Interactions。同时在 TrackingSpace 下创建对应的 Anchor。

image-20250408051707751

​ 此时运行 Unity,可以识别到手柄,但无法交互。接下来配置可交互物体。

2.3 创建交互物体

​ 将 “Grab Interaction” 拖拽到 Hierarchy 窗口中。可看到创建了一个 Cube,并自动为其创建了 HandGrab 子物体,该物体上挂载了 Grabbable、Hand Grab Interactable 和 Grab Interactable 脚本。在以往版本(v63)中,这些都需要一个个手动创建,而且还需要记住脚本间的相互引用,天呐!😢

​ 可以看到,已添加的块右下角图标和未添加的块有所区别(下图绿色标识)。

image-20250408052408732

​ 此时运行 Unity,即可直接用手抓 Cube 了!

​ 但建议将 Cube 先放在一个合适的位置,并且将 OVRCameraRig 下 CenterEyeAnchor 的相机背景改为 Skybox,否则容易看不到物块。

image-20250408053221044

​ 其他 Block 大家自行探索。

3 老手开发:Interaction SDK

​ 尽管 Building Blocks 很令人经验,但是其功能块有限,无法满足定制化的需求(例如 UI 交互)。

​ 但是,Meta 还是贴心地给出了方便的解决方案:右键 -> Interaction SDK。

​ 而在老版本(v63)中,右键出不来 Interaction SDK:😿

image-20250408060042766

​ 现在,我们将场景中所有物体删除,只保留 Directional Light,重新从零开始。

3.1 创建交互功能

​ 在 Hierarchy 窗口中右键,依次选择 Interaction SDK -> Add OVR Interaction Rig。

image-20250408053949743

​ 弹出提示面板,提示我们需添加 OVR Camera Rig。点击 Fix All,再点击 Create 创建 OVR Interaction Rig。

image-20250406221430285

​ 可以看到创建了 OVRCameraRig,其子物体包括:

image-20250408054221406
  • TrackingSpace:用于跟踪与获取设备数据。
  • OVRInteractionComprehensive:字面意思是全面的 Interaction,确实可以看到,什么交互功能都有(懒人必备)。
image-20250408054439340

​ 展开 OVRCameraRig,找到其子物体 PlayerController,将 “First Person Locomotor.cs” 脚本上 Gravity Factor 改为 0,避免进入场景玩家立即下坠。

image-20250408061347180

3.2 创建交互物体

​ 在 Hierarchy 窗口中右键,依次选择 3D Object -> Cube。创建一个 Cube,用于抓取(可以顺便改一下位置和缩放,方便后续好抓)。

image-20250408054601537

​ 选中 Cube,右键,还是选择 Interaction SDK。此时由于选中了物体,比上次多了 6 个选项,其中第 3-6 个是用于 3D 物体交互的,分别为:

  • Add Grab Interaction:添加抓取交互(手柄 + 手势均支持)。
  • Add Ray Interaction:添加射线交互(手柄 + 手势均支持)。
  • Add Distance Grab Interaction:添加远距离抓取交互(手柄 + 手势均支持)。
  • Add Teleport Interaction:添加传送交互(手柄支持)。

​ 这里以第一个为例,选择 Add Grab Interaction。

image-20250408054824967

​ 弹出了提示窗口,提醒说必须为 Cube 添加 Rigidbody 组件才能 Grab。点击 Fix,然后 Create。

image-20250406222014763

​ 可以看到为 Cube 创建了 ISDK_HandGrabInteraction 子物体,该物体上挂载了 Grabbable、Hand Grab Interactable 和 Grab Interactable 脚本。

  1. Grabbable:该物体允许被抓取(必需)。
  2. Hand Grab Interactable:支持手势抓取(可选)。
  3. Grab Interactable:支持手柄抓取(可选)。
image-20250408055406711

​ 此时运行 Unity,即可使用手柄或手势抓取 Cube!

4 UI 交互

​ 新版 SDK 中,配置 UI 交互也变得非常简单。这里我将其分为以下 2 类。

4.1 3D 按钮

​ 叫 3D 按钮,是因为这是 3D 交互,且仅支持按钮交互hh。在 Building Blocks 里面找到 Poke Interaction,拖进来。

image-20250408060506744

​ 将额外添加的 [BuildingBlock] Hand Interactions 删去,咱有 OVRInteractionComprehensive 了。

image-20250408062717285

​ Poke Interaction 的层级结构如下:

  • Poke Interaction(Poke Interactable 脚本使得其能够被点击)
    • Model(Surface 的父物体,无特殊功能)
      • Surface(定义按到底的平面)
    • Visuals(ButtonVisual 的父物体,会比 Surface 突出一些,营造 3D 立体感)
      • ButtonVisual(渲染按钮部分)

​ 该 3D 交互的原理是,手将 Visuals 向前推,推到与 Surface 重合时便停止不动,给人一种真实按下的感觉。

​ 此时运行 Unity,可以按下该 Button,但什么都不会发生。要使得按下能够出发相应事件,需要在 Poke Interaction 物体上挂载 Interactable Unity Event Wrapper 脚本。并执行以下操作:

  1. 关联哪个 Interactable 被监听。这里将 Poke Interactable 拖拽到 Interactable View 中进行关联(下图红色标注)。
  2. 脚本中依据事件名称关联相应的方法。例如,这里我在 Select 中关联了 Cube 的 SetActive 方法,并传入 false(未勾选下方按钮)。
image-20250408062802104

​ 此时,运行 Unity,按下 Button 后,Cube 将消失。

4.2 Unity UI

​ 如果想和 Unity 中的 2D UI 交互,只需要一步操作即可。

​ 这种方法支持 Unity 中的大部分 UI,例如 Button、Toggle、Slider 等。交互功能没有问题,但给人感觉体验不如 3D Button。

​ 首先右键选择 UI -> Button - TextMeshPro,创建 Unity Button。

image-20250408063141002

​ 将 Canvas 的 Render Mode 设置为 World Space,并更改其位置和长宽(之前的太大了)。Button 也更改小一点。

image-20250408063329750

​ 选中 Canvas,右键依次选择 Interaction SDK -> Add Poke Interaction Canvas。

image-20250408063613843

​ 弹出提示界面,需要在 EventSystem 中添加 Pointable Canvas Module 脚本以支持 UI 的 Point 交互。点击 Fix,再点击 Create。

image-20250408063729816

​ 可以看见为 Canvas 创建了 ISDK_PokeInteraction 子物体,其挂载了:

  • Poke Interactable:可被点击。
  • Pointable Canvas:使 Canvas 下的所有 UI 支持点击操作。
image-20250408063928013

​ 之后,就可以像往常 Unity 开发一样,在 UI 中添加对应的事件了。

image-20250408064205330

​ 此时运行 Unity,点击按钮,即可将 Cube 隐藏。

相关文章:

  • 算法(二十一)
  • nginx如何实现负载均衡?
  • 详解 Go 的常见环境变量及其在 zshrc 中的配置
  • ✅ Ultralytics YOLO 训练(Train)时实时获取 COCO 指标(AP):2025最新配置与代码详解 (小白友好 + B站视频)
  • 递归实现指数型枚举
  • 基于金字塔视觉变换的类引导网络高分辨率遥感图像高效语义分割
  • k8s 1.24.17版本部署(使用Flannel插件)
  • 数字人技术的核心:AI与动作捕捉的双引擎驱动(2/10)
  • C,C++,C#
  • 论文_基于联邦增量学习的SND环境下DDos攻击检测模型
  • Qt项目——记事本
  • 演员郑歌语正式加入创星演员出道计划,开启演艺新蓝图
  • DFS 蓝桥杯
  • 【C++算法】52.链表_两两交换链表中的节点
  • 分布式防护节点秒级切换:实战配置与自动化运维
  • FTP协议和win server2022安装ftp
  • HarmonyOS-ArkUI Ability进阶系列-各类生命周期总结
  • 网络安全应急响应-日志分析
  • 核心机制与主流协议解析
  • vim定位有问题的脚本/插件的一般方法
  • 体坛联播|博洛尼亚时隔51年再夺意杯,皇马逆转马洛卡
  • 多条跨境铁路加速推进,谁是下一个“超级枢纽”?
  • 人民日报任平:从汽车产销、外贸大盘看中国经济前景
  • 广东省中医院脾胃病科大科主任张北平病逝,年仅52岁
  • 220名“特朗普币”持有者花1.48亿美元,获邀与特朗普共进晚餐
  • 俄乌拟在土耳其举行会谈,特朗普:我可能飞过去