Snapdragon Spaces 开发指南(7)
5.4.2.4 交互功能
控制箱
控制框允许您通过组合以下交互来远程检查对象:移动、旋转和调整大小。该盒子提供视觉反馈来指示与内部对象的交互。在目标对象周围绘制一个框,该框应适合该对象的大小。
QCHT 控制箱说明
借助此组件,您可以自定义交互的各个方面。例如,您可以在标线上设置颜色和精灵,或者更改激光颜色和盒子灯光。该组件允许您自定义移动、旋转和调整大小交互。
如何与控制盒交互?
- 在盒子的面上进行光线投射可以移动它
- 瞄准角落可以调整其大小
- 瞄准边缘的中间可以旋转它
视觉提示
当用户与之交互时,控制盒通过提供视觉反馈来做出反应。
起初,当对象空闲时,盒子是不可察觉的。当用户开始对其进行光线投射时,十字线将照亮盒子以表明可以进行交互。此外,其图标将指示哪种交互(移动、旋转、调整大小)。选择后,该框的轮廓会亮起以指示选择。
逐步整合
- 创建一个对象(例如 3D 立方体)
- 添加QCHT Control Box脚本
- 碰撞器需要处于触发模式
- 定制控制盒
虚拟力反馈 (VFF)
![](https://i-blog.csdnimg.cn/blog_migrate/965eeee6f8ce9ef989d2c886b5e6f454.png)
此功能使用户感觉与实体虚拟对象进行交互:它有助于克服触觉反馈的缺乏。当与虚拟对象交互时,手部头像将分成两个手部表示。鬼手(来自用户的手部行为)将继续其移动,而主手将停留在虚拟元素上(受物理限制)。
主手
![](https://i-blog.csdnimg.cn/blog_migrate/e0f3e9d2046a1cbdf44b834a21ec9cc7.png)
VFF 上下文中的手部头像也代表用户真实手部的行为,但手部停留在有碰撞器的物体上,以创建虚拟触觉反馈的感觉。
鬼手
鬼手的目的是代表用户手部的实时行为。当手部头像与物体碰撞时会出现。它的出现是逐渐且谨慎的,以免打扰用户。
VFF 的物理设置
由于 VFF 功能需要物理,因此在项目设置中配置物理至关重要,如下所示:
![](https://i-blog.csdnimg.cn/blog_migrate/fbcae23a7a7c5a54fc96cec254bc61dd.png)
捕捉
![](https://i-blog.csdnimg.cn/blog_migrate/adbc537bbbd31a861a424dceee8184a4.png)
此功能的目的是创建物理约束的姿势,以使捕捉的虚拟元素连贯。这个想法是调整手和手指的旋转,使它们最适合捕捉物体。这些姿势与选择手势相关联,例如抓取或捏合。
当用户在碰撞对象时做出选择手势时,虚拟手将按照其配置进行捕捉。
描述
XR 手部可交互快速姿势提供程序
通过在XR Grab Interactable下添加XR Hand Interactable Snap Pose Provider组件 (打开新窗口)层次结构中的对象,可以为可交互提供捕捉姿势。可以在 XR Hand Interactable Snap Pose Provider 下创建一个或多个不同比例的 XR Hand Interactable Snap Pose。然后,捕捉姿势提供程序可以根据当前手部比例在所有捕捉姿势之间进行插值。当抓取可交互对象时,当前用户手部比例的插值姿势将自动应用到对象上。
提示
手秤夹在0.5f和之间1.6f。
![](https://i-blog.csdnimg.cn/blog_migrate/cd1af69e2cc6c4d40742874ef33d0cd8.png)
XR 手部互动快速姿势
捕捉姿势允许在对象上定义手捕捉的精确位置。
通过编辑变换和手部关节旋转,开发人员可以设置特定手部比例的姿势。手部比例由捕捉姿势变换的 x 比例值定义。
默认情况下,捕捉姿势数据在游戏对象本身上序列化。通过单击导出按钮可以导出姿势并用作参考。如果hand pose ref设置了该字段,数据将在引用的手势资源中序列化。要将参考手部姿势数据应用于捕捉姿势对象序列化,请单击“应用姿势检查器”按钮。
警告
从手部姿势参考编辑手部关节将序列化手部姿势资源中的数据。所有引用该手部姿势资源的捕捉姿势都将随之改变。
![](https://i-blog.csdnimg.cn/blog_migrate/daf3cc62c872cf8513bc509a859659c9.png)
逐步整合
- 添加XR Hand Interactable Snap Pose Provider对象作为可交互对象的子对象。选择捕捉姿势提供者的惯用手。创建两个捕捉姿势提供者,每只手一个,以执行双手捕捉。如果在抓取可交互项时某些手指可以保持松开状态,请将遮罩字段从所需字段更改为对这些手指可用。
提示
为一只手设置提供程序和姿势后,复制提供程序、更改惯用手、翻转姿势并调整变换,以快速获取另一只手的镜像捕捉姿势提供程序。
-
在XR Hand Interactable Snap Pose Provider 对象下添加XR Hand Interactable Snap Pose对象。
-
使用变换工具设置捕捉姿势的姿势和比例,然后通过单击“编辑关节”按钮编辑手部关节。
![](https://i-blog.csdnimg.cn/blog_migrate/55845028e4f4d37fbb0c0f3454886578.png)
警告
对每个轴使用统一的比例。XR 手部可交互捕捉姿势提供程序将仅使用 x 缩放值来对捕捉姿势进行排序。
- 在提供者姿势列表中添加捕捉姿势。
- 重复添加不同比例的XR 手部可交互捕捉姿势。
- 通过使用XR Hand Interactable Snap Pose Provider组件上的比例滑块更改比例来检查姿势插值。
![](https://i-blog.csdnimg.cn/blog_migrate/9f468f73ce69816164ba7300245455e0.gif)
手动过滤
此功能允许用户过滤可交互对象上的交互。这是IXRSelectFilterXR Hand Filter的自定义实现 (打开新窗口)它允许在选择可交互项时处理额外的验证检查。
描述
选择可交互项时,会根据XR 手控制器给出的惯用手和手势XR Hand Filter执行操作。开发人员可以选择哪只手和手势能够与对象交互。在运行时,任何交互器都会在选择可交互项之前检查过滤器。默认情况下,如果XR 控制器不是XR 手控器,则不会执行任何过滤,并且会选择可交互的。
逐步整合
只需按照以下步骤操作,即可选择哪只手和手势能够与对象交互:
-
将XR 手动过滤器组件添加到对象。该对象必须具有XR Grab Interactable (打开新窗口)组件以便可交互。
-
在“选择手”字段中,选择“两者”、“右手”或“左手”以定义哪只手可以与该对象交互。
-
在“选择手势”字段中,选择“两者”、“抓取”或“捏合”以定义可以与该对象交互的手势。
笔记
捏合手势由映射到XRHandControllerstriggerPressed的 SelectAction 引用上的操作定义。抓取手势由映射到XRHandControllers的OptionalSelectAction 上的操作定义。gripPressed
例子
蓝色立方体必须用双手来选择,但只能通过抓取手势来选择。可交互的应该是这样的:
![](https://i-blog.csdnimg.cn/blog_migrate/f9f724a5cde3214bb1dfc40e17380272.png)
5.4.2.5 扩展手部追踪示例
此示例场景使用手部跟踪功能在演示环境中演示了许多交互(近端、远端、一只手、两只手)。有关手部追踪工作原理的更多信息,请参阅手部追踪集成 部分。
构建示例场景
首先,确保已Hand Tracking在 OpenXR 项目设置中启用。
![](https://i-blog.csdnimg.cn/blog_migrate/4e3c6ccc6405c9aba0fe18bd72a2c6ba.png)
然后,从QCHT Unity Interactions 包导入示例。
![](https://i-blog.csdnimg.cn/blog_migrate/1be6a18859c63dec88b727423379f598.png)
完成后,所有场景都可以在 Assets > Samples > QCHT Unity Interactions > 4.0.0 > QCHT Interactions Samples 中找到。
要在编辑器模式下尝试这些示例,请打开“资产 > 示例 > QCHT Unity 交互 > 4.0.0 > QCHT 交互示例 > 菜单 > 场景”中提供的QCHT 示例- 菜单场景。在编辑器模拟模式下进行交互,请参考场景设置中的信息。
重要的
在测试手部跟踪示例之前,有必要将所有场景添加到构建设置中。
![](https://i-blog.csdnimg.cn/blog_migrate/af6e4f12dd02c0cfb9966bb57cd59a56.png)
样品描述
该示例分为 4 个场景。QCHT示例 - 菜单主场景结合了所有这些。
主菜单允许您在场景、交互和手部头像之间切换。一般来说,不建议在 AR 环境中显示头像。
近端
![](https://i-blog.csdnimg.cn/blog_migrate/203383e1fbeed143f99e8799e2729639.png)
简单的交互
通过吸附(粉色立方体)或不吸附(蓝色立方体)与 3D 对象进行近端交互。
捕捉
当用户与粉色立方体进行交互(通过捏合)时,他们的手的头像将捕捉到它,如近端捕捉编辑器中的预设。
可捕捉对象主要与捕捉姿势提供程序系统和捕捉姿势生成器一起使用。
远端
![](https://i-blog.csdnimg.cn/blog_migrate/00dc2455e79d91061b4fb7ada50784d3.png)
当用户用手中的光线投射瞄准熊猫时,熊猫就会进行交互。通过控制盒组件,通过捏合,它可以移动、旋转和调整大小。
用户界面元素
![](https://i-blog.csdnimg.cn/blog_migrate/5d79957fbe216da1dbeb471ffbdcbbc4.png)
对于 UI 元素,可以使用光线投射系统进行操作。有许多元素可以交互,例如单选按钮、复选框、滑块、滚动视图和按钮。要操纵对象,请将其定位并捏合以进行选择。
UI 元素接收所有事件并将其转换为 Unity 标准。它是用户操作和系统反应之间的联系。Raycasted 元素响应所有 Unity 回调。请参阅远端交互部分以了解有关光线投射系统的更多信息。
画
![](https://i-blog.csdnimg.cn/blog_migrate/5a5ce3827f931f4495f24bd24e1d464c.png)
捏合手势启动绘图操作,张开手势停止绘图操作。
戳(实验)
您可以在 QCHT 示例 - Poke 场景中找到 Poke 的实现示例,位于“资产 > 示例 > QCHT Unity Interaction > 4.0.0 > QCHT 交互示例 > Poke > QCHT 示例 - Poke”
![](https://i-blog.csdnimg.cn/blog_migrate/0853af37d423ebf728c416aa947805fd.png)
在此场景中,Poke Interactor用于虚拟键盘。借助Poke Interactor,键盘允许用户用食指触摸按键来输入文本。
每个按键包含一个按钮 (打开新窗口)和一个简单的交互 (打开新窗口)。键还具有一个XRPokeFollowTransform组件,该组件为其提供模拟按下操作的视觉效果,并KeyButton设置按下时的行为。
还可以通过“远端交互”在按键上进行交互。