第 11 课
实现手部交互功能(下)
本课将在 PICO 设备上启用手部跟踪和手部交互。你会完成平台开关、手部交互配置和输入动作文件替换,再按照“手部显示、射线出现、捏合生效、界面响应”的顺序检查每一层能力。
让 PICO 双手真正完成指向、捏合和抓取
接通 PICO、OpenXR、XR Hands、输入动作与交互器之间的数据链路,让上一课准备的虚拟手能够操作博物馆中的物体和界面。
学完你将能够
学习目标
- 区分手部跟踪、输入动作和场景交互三个能力层。
- 在 Android 平台启用 PICO 手部跟踪子系统和 PICO Support 手部功能。
- 根据项目需要选择 Controllers And Hands 输入模式。
- 添加 Hand Interaction Profile,并说明它与关节跟踪的区别。
- 解释 Action Map、Action 和 Binding 三个输入动作概念。
- 直接覆盖原有 XRI Default Input Actions,并确认场景引用有效。
- 识别左右手射线、捏合和界面按压所需的 PICO 输入路径。
- 在 MainScene 与 HandsDemoScene 中完成远近交互和界面戳按。
- 根据第一个没有达到预期的现象定位问题所在层。
开始操作前
准备工作
- 确认上一课已经把 XR Origin Hands 加入 MainScene,旧 XR Origin 处于停用状态。
- 确认 XR Hands 1.5.1、XR Interaction Toolkit 3.1.2、Starter Assets 和 Hands Interaction Demo 已准备完成。
- 确认虚拟手材质已经适配 URP,新玩家装置使用 Floor 地面跟踪模式。
- 确认 PICO OpenXR SDK 已完成基础项目设置,设备系统已经允许使用手部跟踪。
- 需要串流运行时,确认 PICO Live Preview 能够连接设备。
- 保存 MainScene,并确认能够从 Input Action Manager 定位当前使用的 XRI Default Input Actions。
本课学习路线
按照学习模块逐步完成
每个模块都包含理解、跟随操作和独立实践。看见虚拟手,只说明数据链路完成了一部分
区分手部跟踪与手部交互
手部模型能跟随真实手运动,说明关节跟踪已经工作;能否出现射线、捏合物体和戳按界面,还取决于输入动作与交互器。三个能力层分别解决什么问题
Hand Tracking 可以翻译为“手部跟踪”。PICO 设备通过摄像头取得手腕、手掌和手指关节的位置与旋转,再由 XR Hands 整理成 Unity 能读取的数据。
Hand Interaction 可以翻译为“手部交互”。输入动作把关节数据和手势解释为指向、捏合、按压等统一动作,交互器再让文物与界面对这些动作产生响应。
从左向右阅读:PICO 先识别真实双手,XR Hands 提供关节数据,输入动作解释射线与捏合,交互工具最后让三维物体和界面产生响应。
手机上可左右滑动;点击图片可以查看完整图三层能力与成功现象
出现问题时,从最前面的现象开始,不要跳过数据链路直接修改物体。
左右滑动表格,可查看完整内容
| 能力层 | 成功现象 | 主要设置 |
|---|---|---|
| 跟踪层 | 虚拟手出现并跟随真实手 | Hand Tracking Subsystem、PICO Hand Tracking、XR Hands |
| 动作层 | 系统能够读取射线姿态、捏合状态和捏合强度 | Hand Interaction Profile、XRI Default Input Actions |
| 交互层 | 文物或界面能够响应选择、抓取和戳按 | 手部交互器、交互层、可交互组件 |
根据第一个异常现象确定起点
先处理最早没有达到预期的层,后面的现象才有判断意义。
左右滑动表格,可查看完整内容
| 观察到的现象 | 已经正常的部分 | 优先检查 |
|---|---|---|
| 虚拟手完全不出现 | 尚不能确认关节数据 | PICO 设备、平台开关和 XR Hands |
| 虚拟手会动,但没有射线 | 关节跟踪和模型显示 | Aim Position、Aim Rotation 与射线交互器 |
| 射线出现,但捏合无反应 | 跟踪和射线姿态 | indexPressed、Select 与交互层 |
| 能抓物体,但不能点界面 | 三维交互基本正常 | UI Press、界面输入组件和界面射线接收 |
练习分层判断
分别分析“手不显示”“手显示但无射线”“有射线但无法捏合”三个现象。
- 说出每个现象最可能属于跟踪层、动作层还是交互层。
- 为每个现象选择第一项需要查看的设置。
- 能够解释为什么手部模型会动不等于已经能够抓取物体。
让 PICO 向 XR Hands 提供真实双手数据
开启 PICO 手部跟踪
PICO 一体机运行 Android 应用。平台标签、手部跟踪子系统、PICO Support 和设备系统设置必须同时正确,虚拟手才有真实数据来源。进入正确的 OpenXR 平台设置
- 01
打开 Edit → Project Settings → XR Plug-in Management → OpenXR。
- 02
在 OpenXR 页面顶部选择 Android 图标。
- 03
在 Enabled Interaction Profiles 中保留与当前 PICO 设备匹配的手柄配置。
- 04
在 OpenXR Feature Groups 中选择 PICO XR 分类。
- 05
勾选 Hand Tracking Subsystem。
- 06
确认 PICO OpenXR Features 和 PICO Support 处于有效状态。
为什么平台标签不能选错
Unity 会分别保存桌面平台和 Android 平台的 OpenXR 设置。即使在桌面标签中打开了手部功能,打包到 PICO 的 Android 应用也不一定会使用它。
进入页面后先确认顶部 Android 图标,再开始添加设备配置和功能开关。
启用 PICO Support 的手部功能
- 01
找到 PICO Support,点击右侧齿轮按钮。
- 02
在弹出的设置中勾选 Hand Tracking。
- 03
展开 Hand Tracking Support。
- 04
选择 Controllers And Hands。
- 05
普通博物馆交互先保持默认跟踪频率。

重点观察弹出的 PICO Support 设置:Hand Tracking 需要勾选,Hand Tracking Support 选择 Controllers And Hands。
点击图片可以查看完整截图两种输入方式怎样选择
本项目既要使用双手,也要保留手柄作为稳定的备用输入方式。
左右滑动表格,可查看完整内容
| 选项 | 运行方式 | 适合情况 |
|---|---|---|
| Controllers And Hands | 识别双手后切换到手部,拿起手柄后切回手柄 | 需要双手和手柄自动切换的项目 |
| Hands Only | 应用只使用双手,不自动切回手柄 | 明确不允许使用手柄的纯手部体验 |
设备系统也要允许使用双手
项目设置决定应用是否请求手部能力,PICO 设备系统则决定设备是否提供这项能力。请在设备系统设置中启用手部跟踪。
放下手柄后,把双手放在头戴设备前方并保持光线充足。退出应用时,如果 PICO 系统界面也能识别双手,说明设备端条件基本正常。
接通 PICO 跟踪层
同时完成 Unity 项目设置和 PICO 设备设置,再观察虚拟手是否出现。
- 当前设置位于 Android 平台。
- 已选择与当前 PICO 设备匹配的手柄配置。
- Hand Tracking Subsystem 已启用。
- PICO Support 中的 Hand Tracking 已启用。
- Hand Tracking Support 已设置为 Controllers And Hands。
- 设备系统允许手部跟踪,双手位于摄像头容易观察的位置。
让 OpenXR 理解手部指向与捏合输入
补充手部交互配置
关节跟踪告诉 Unity 手指在哪里,Hand Interaction Profile 则描述指向和捏合等标准手部输入。两者相邻但不能互相替代。添加 Hand Interaction Profile
- 01
继续停留在 Android 平台的 OpenXR 页面。
- 02
找到 Enabled Interaction Profiles。
- 03
点击列表右下角的加号。
- 04
选择 Hand Interaction Profile。
- 05
确认它与当前 PICO 手柄配置同时保留在列表中。

点击交互配置列表右下角的加号,再选择 Hand Interaction Profile。它描述标准手部输入,不会取代已有的 PICO 手柄配置。
点击图片可以查看完整截图三个相邻设置各自负责什么
它们分别连接关节数据、标准手部输入和 Unity 动作,不是重复开关。
左右滑动表格,可查看完整内容
| 设置 | 解决的问题 | 缺少时的表现 |
|---|---|---|
| Hand Tracking Subsystem | Unity 能否取得手腕、手掌和手指关节数据 | 虚拟手无法由真实双手驱动 |
| Hand Interaction Profile | OpenXR 怎样表达指向和捏合 | 手能显示,但射线或捏合输入不完整 |
| XRI Default Input Actions | 输入怎样连接到 Select、UI Press 等 Unity 动作 | 交互器读取不到对应动作 |
查看项目配置提示
- 01
打开 Edit → Project Settings → XR Plug-in Management → Project Validation。
- 02
逐项阅读与 OpenXR、交互层和软件包有关的提示。
- 03
只处理能够理解且与当前 PICO 设置相关的项目。
- 04
处理后返回 OpenXR 页面,确认手部与手柄配置都仍然存在。
完成动作层的 OpenXR 入口
添加手部交互配置,并用自己的话说明它和跟踪子系统的区别。
- Enabled Interaction Profiles 中存在当前 PICO 手柄配置。
- 同一列表中已经加入 Hand Interaction Profile。
- 能够说明跟踪子系统提供关节数据,手部交互配置描述指向与捏合。
- 没有因为添加手部配置而删除原有手柄配置。
把 PICO 射线、捏合和按压连接到 Unity 动作
下载并替换默认输入动作
输入动作文件负责把设备路径转换成 Select、UI Press 等统一功能。请先下载本课文件,再按“定位原文件、覆盖同名文件、确认引用、检查左右手绑定”的顺序操作。先理解三个输入动作概念
交互器只读取统一动作,不需要知道输入来自手柄还是双手。
左右滑动表格,可查看完整内容
| 名称 | 中文理解 | 本课示例 |
|---|---|---|
| Action Map | 一组相关动作 | XRI Left、XRI Left Interaction |
| Action | 项目理解的功能 | Aim Position、Select、UI Press |
| Binding | 设备输入与动作之间的连接 | <PicoAimHand>{LeftHand}/indexPressed 连接到 Select |
下载已经加入 PICO 绑定的输入动作
文件包含左右手的射线姿态、状态、捏合按下和捏合强度绑定。下载后保持文件名不变,直接覆盖项目中原有的同名输入动作文件。
- Unity 输入动作文件
- 包含左右手 PICO 绑定
- 文件大小约 141 KB
从场景找到正在使用的动作资源
- 01
停止运行模式并保存 MainScene。
- 02
选中 XR Origin Hands。
- 03
在属性窗口找到 Input Action Manager。
- 04
展开 Action Assets,点击 Element 0 中的动作文件。
- 05
Unity 会在项目窗口定位当前使用的 XRI Default Input Actions。
- 06
记住 Unity 实际定位的目录,不要只依赖固定版本路径。
用下载文件覆盖原输入动作
- 01
停止运行模式,并关闭 Input Actions 编辑窗口。
- 02
打开下载文件所在文件夹。
- 03
把下载文件复制到 Unity 定位的 Starter Assets 原目录。
- 04
保持文件名为 XRI Default Input Actions.inputactions。
- 05
系统提示存在同名文件时,选择覆盖或替换。
- 06
回到 Unity,等待资源重新导入和程序编译完成。
- 07
再次选中 XR Origin Hands,确认 Input Action Manager 的 Element 0 仍有有效引用。
Input Action Manager 必须满足的条件
文件存在不等于场景正在使用它,运行时必须由管理器启用动作资源。
左右滑动表格,可查看完整内容
| 确认项 | 正确状态 | 错误表现 |
|---|---|---|
| Action Assets 数量 | 至少包含当前默认输入动作 | 数量为 0 时没有动作被启用 |
| Element 0 | 指向新的 XRI Default Input Actions | None 或 Missing 会让输入失效 |
| 管理器数量 | 只有需要的一套管理器启用 | 多个管理器可能重复启用不同动作 |
左右手需要的五类 PICO 路径
左手和右手应成对出现,只是手别标记不同。
左右滑动表格,可查看完整内容
| PICO 输入路径 | 连接到的动作 | 作用 |
|---|---|---|
| devicePosition | Aim Position | 决定手部射线起点 |
| deviceRotation | Aim Rotation | 决定手部射线方向 |
| aimFlags | Meta Aim Flags | 提供射线与手势状态标记 |
| indexPressed | Select、UI Press | 表示捏合是否达到按下条件 |
| pinchStrengthIndex | Select Value、UI Press Value | 提供从未捏合到完全捏合的连续数值 |
怎样检查左右手路径
双击动作文件进入 Input Actions 编辑器。在左手动作中寻找 <PicoAimHand>{LeftHand},在右手动作中寻找 <PicoAimHand>{RightHand}。
Starter Assets 中的 Meta Aim Flags 是现有动作名称,PICO 的 aimFlags 也会连接到这个动作。这里应关注绑定路径和引用是否正确,不要随意改名,以免场景组件失去引用。
动作与学生操作的对应关系
把路径、动作和实际手势联系起来,出现问题时更容易找到目标。
左右滑动表格,可查看完整内容
| 学生操作 | 关键动作 | 运行结果 |
|---|---|---|
| 用手指向远处 | Aim Position、Aim Rotation | 射线从正确位置朝正确方向发出 |
| 拇指与食指捏合 | Select、Select Value | 选择或抓取当前目标 |
| 捏合虚拟界面 | UI Press、UI Press Value | 按钮、滑块或滚动区域响应 |
| 把手移到物体附近并捏合 | Select 与近距离交互器 | 直接抓取三维物体 |
完成输入动作替换
从场景实际引用出发定位原文件,直接覆盖后检查管理器与左右手绑定。
- 下载文件已直接覆盖 Unity 实际定位的原输入动作文件。
- 文件名保持为 XRI Default Input Actions.inputactions。
- Input Action Manager 的 Element 0 指向有效动作文件。
- 左手存在五类 <PicoAimHand>{LeftHand} 路径。
- 右手存在对应的 <PicoAimHand>{RightHand} 路径。
- Select、UI Press 及其数值动作都具有 PICO 绑定。
按照现象顺序检查,不要一次修改多个设置
分层检查场景交互结果
先在 MainScene 检查远距离和近距离三维交互,再到 HandsDemoScene 检查界面戳按。每一步只证明一层能力已经接通。依次检查虚拟手、射线和抓取
- 01
连接 PICO 设备或启动可用的 PICO 串流环境。
- 02
运行 MainScene,放下并移开手柄。
- 03
把双手放在头戴设备前方,观察左右虚拟手是否出现。
- 04
缓慢移动、旋转并弯曲手指,观察关节动作是否一致。
- 05
抬手指向远处可抓取物体,观察射线位置和方向。
- 06
捏合拇指与食指,尝试远距离选择并把物体拉近。
- 07
把手靠近物体,再次捏合并直接抓取。
- 08
重新拿起手柄,确认输入方式能够切回手柄。
每个成功现象说明什么
下一项依赖上一项;前一项失败时,先不要修改后一项的组件。
左右滑动表格,可查看完整内容
| 成功现象 | 能够说明的内容 |
|---|---|
| 双手出现 | PICO 跟踪、XR Hands 和手部模型基本正常 |
| 关节动作一致 | 手部关节姿态正在持续更新 |
| 射线出现并跟随 | Aim Position 和 Aim Rotation 可用 |
| 捏合可以选中 | indexPressed、Select 与交互层基本正常 |
| 捏合强度变化平滑 | pinchStrengthIndex 和 Select Value 可用 |
| 近距离可以直接抓取 | 近距离交互器、碰撞体和交互层匹配 |
| 重新拿起手柄后切回 | 输入模式与输入方式管理器正常 |
检查界面戳按与远距离点击
- 01
打开 Hands Interaction Demo 中的 HandsDemoScene。
- 02
选中 XR Origin Hands,把 Tracking Origin Mode 设置为 Floor。
- 03
保存并运行场景。
- 04
用食指靠近按钮,观察悬停、按下和恢复状态。
- 05
依次尝试滑块、开关和滚动区域。
- 06
指向远处界面并捏合,确认射线点击也能工作。
- 07
抓取示例中的三维物体,确认界面与物体交互都可用。

不要只观察双手是否出现,还要确认按钮高亮、按下状态、滑块数值和滚动内容都能随手部操作发生变化。
点击图片可以查看完整截图界面戳按与射线点击的区别
两种方式使用的动作和交互器不同,都成功才能说明界面交互较完整。
左右滑动表格,可查看完整内容
| 方式 | 手部动作 | 适合距离 | 主要依赖 |
|---|---|---|---|
| Poke 戳按 | 食指靠近并穿过按钮表面 | 近距离 | Poke Interactor 与界面碰撞区域 |
| Ray + Pinch 射线加捏合 | 指向远处界面后捏合 | 远距离 | Aim、UI Press 与射线交互器 |
完成双手交互循环
左右手都要独立完成一次远距离、近距离和界面操作,并记录第一项异常现象。
- 左右虚拟手都能出现并跟随真实手。
- 左右手射线都从正确位置指向目标。
- 左右手都能用捏合完成一次远距离选择。
- 至少用一只手完成一次近距离直接抓取。
- 食指能够戳按按钮,射线能够点击远处界面。
- 放下手柄和重新拿起手柄时,输入方式能够自动切换。
在空项目中重新生成与当前版本匹配的绑定
了解输入绑定的生成方式
现成文件能够直接完成本课操作,但了解 PICO Building Blocks 的生成方式,可以在更换 XR Interaction Toolkit 版本后重新建立匹配的动作资源。使用 PICO Building Blocks
- 01
新建一个空 Unity 项目。
- 02
安装与目标环境匹配的 PICO Unity Integration SDK。
- 03
打开 PICO → PICO Building Blocks。
- 04
进入 PICO Hand 分类并选择 XRI Hand Interaction。
- 05
按提示准备 XR Hands、Starter Assets、HandVisualizer 和 Hands Interaction Demo。
- 06
再次执行 XRI Hand Interaction,让工具为左右手写入 PICO 输入绑定。
两套 PICO 工具在本课中的用途
当前项目继续使用 OpenXR,空项目只用于生成输入动作绑定。
左右滑动表格,可查看完整内容
| 工具 | 本课用途 | 使用位置 |
|---|---|---|
| PICO OpenXR SDK | 让当前博物馆项目运行 PICO OpenXR 功能 | 当前课程项目 |
| PICO Unity Integration SDK | 使用 Building Blocks 生成 PICO 输入绑定 | 单独的空项目 |
确认左右手路径确实写入
- 01
打开生成后的 XRI Default Input Actions。
- 02
在 XRI Left 中检查 Aim Position、Select、Select Value、UI Press 和 UI Press Value。
- 03
确认对应动作中出现 <PicoAimHand>{LeftHand} 路径。
- 04
在 XRI Right 中确认 <PicoAimHand>{RightHand} 路径。
- 05
不要只根据命令执行完成判断结果,要以动作文件中的实际绑定为准。
覆盖原文件并重新完成场景检查
- 01
复制空项目中生成的 .inputactions 文件。
- 02
回到当前项目,把生成文件复制到 Starter Assets 的原位置。
- 03
保持文件名不变,并确认覆盖原有同名文件。
- 04
确认 Input Action Manager 的引用。
- 05
重新按上一模块的顺序检查双手、射线、捏合、戳按和手柄切换。
说明自动生成工具做了什么
完成空项目练习后,用动作文件中的实际内容说明结果。
- 能够说出 Building Blocks 自动准备了哪些依赖。
- 能够在左右手动作中指出实际生成的 <PicoAimHand> 路径。
- 能够说明为什么不应把两套 PICO SDK 混合加入当前课程项目。
- 能够把生成文件安全带回当前项目并保持引用有效。
综合操作:完成 PICO 双手交互
从平台开关开始,独立完成配置、文件替换和场景操作。
- 在 Android OpenXR 中启用 Hand Tracking Subsystem。
- 在 PICO Support 中启用 Hand Tracking,并选择 Controllers And Hands。
- 添加 Hand Interaction Profile,同时保留 PICO 手柄配置。
- 下载 XRI Default Input Actions,并直接覆盖项目中的原文件。
- 确认 Input Action Manager 和左右手五类 PICO 路径。
- 在 MainScene 完成射线、远距离捏合、近距离抓取和手柄切换。
- 在 HandsDemoScene 完成界面戳按与远距离点击。
常见现象与处理方法
找到第一项异常现象,再从对应层开始处理。
左右滑动表格,可查看完整内容
| 现象 | 优先检查 | 处理方向 |
|---|---|---|
| 设备中完全看不到双手 | 设备系统、光线、Android 平台开关 | 启用设备和项目的手部跟踪,让双手进入摄像头视野 |
| 系统界面能识别手,应用中没有 | PICO OpenXR、Hand Tracking Subsystem、PICO Support | 确认应用构建到 Android 且两个手部开关都启用 |
| 双手能显示但没有射线 | Hand Interaction Profile、Aim 绑定、射线交互器 | 补齐左右手 Aim Position 与 Aim Rotation |
| 射线出现但捏合无反应 | indexPressed、Select、目标交互层 | 检查捏合绑定和目标可交互组件 |
| 能操作物体但不能操作界面 | UI Press、XR UI Input Module、界面射线接收 | 补齐界面动作并检查 Canvas 组件 |
| 射线正常但近距离不能抓 | 碰撞体、可抓取组件、近距离交互器 | 让手进入目标范围并确认交互层匹配 |
| 覆盖文件后全部输入失效 | Input Action Manager 的 Element 0 | 重新指定新动作文件并确认没有 Missing |
| 只有一只手正常 | 左右手路径和对象启用状态 | 比较 LeftHand 与 RightHand 绑定是否成对 |
| 放下手柄后不切换 | Controllers And Hands 与输入方式管理器 | 确认模式、引用和双手跟踪状态 |
| 示例场景正常,MainScene 不正常 | 两个场景的玩家装置、动作文件和交互层 | 逐项比较 Input Action Manager 与手部交互器 |
本课成果清单
逐项确认后,PICO 手部输入就已经从设备接通到博物馆场景。
- 我能区分跟踪层、动作层和交互层。
- Android 平台的 PICO 手部跟踪开关已经启用。
- 输入模式为 Controllers And Hands。
- Hand Interaction Profile 与 PICO 手柄配置同时存在。
- 本课输入动作文件已下载,并直接覆盖到原位置。
- Input Action Manager 引用有效,左右手 PICO 路径完整。
- 左右虚拟手都能显示、移动并产生射线。
- 捏合可以完成远距离选择和近距离抓取。
- 食指可以戳按界面,射线可以操作远处界面。
- 放下手柄和重新拿起手柄时能够自动切换输入方式。
- 我能根据第一个异常现象找到对应的数据层。
- 我知道如何在空项目中重新生成 PICO 输入绑定。
把知识变成作品
本课练习
请按顺序完成以下任务,并保存自己的学习成果。- 01
请同学随机说出一个手部交互故障现象,你沿数据链路判断应该先检查跟踪层、动作层还是交互层,并说明理由。
- 02
分别用左手和右手完成远距离选择、近距离抓取与界面戳按,记录两只手是否具有一致的交互结果。
- 03
在空项目中生成一次 PICO 输入绑定,并与本课下载文件比较五类关键路径是否完整。
把本课进度保存下来
登录后可以保存浏览内容、有效学习时间、完成状态和答题参与记录。