Unity2020.3/OpenXR/MRTK2.8下Hololens2全息远程无手部追踪问题
Hololens2迁移至Unity2020.3 LTS+OpenXR后远程原点偏移及手部追踪失效问题解决
问题背景与现象
- 原开发环境:Unity2019.4 + 内置XR/Windows Mixed Reality,全息远程、手部追踪功能正常
- 新环境:Unity2020.3 LTS + OpenXR,编辑器/本地运行正常,可按官方指引连接HL2远程,但出现两个核心问题:
- 远程运行时场景原点偏移(常加载于身后或下方),非远程运行时原点位置正常
- 设备内完全无法实现手部追踪
- 已尝试操作:导入DotNetWinRT、官方排查步骤,均无效
- 附:Unity2019、2020包列表及Unity2020 OpenXR项目设置截图
排查与解决步骤
一、远程场景原点偏移问题
- 校准OpenXR空间设置
- 进入
Edit > Project Settings > XR Plug-in Management > OpenXR > Windows Mixed Reality,将Tracking Origin Mode设置为Floor(匹配Hololens2默认空间定位规则) - 打开Unity编辑器
XR > Windows Mixed Reality > Holographic Remoting窗口,将Spatial Locator Mode设为Shared,避免独立定位导致的原点偏移
- 进入
- 重置设备空间校准
- 在Hololens2设备中进入
Settings > System > Spatial Mapping > Reset Spatial Mapping,重新完成空间校准后再连接远程 - 远程连接前,确保设备处于稳定空间环境,避免初始定位异常
- 在Hololens2设备中进入
- 检查场景对象设置
- 禁止手动修改
Camera或XR Origin的初始位置/旋转,OpenXR会自动接管空间定位逻辑 - 排查项目中是否存在强制修改原点位置的自定义脚本,远程模式下临时禁用后测试
- 禁止手动修改
二、手部追踪失效问题
- 启用OpenXR手部追踪扩展
- 进入
Edit > Project Settings > XR Plug-in Management > OpenXR > Features,勾选Hand Tracking和Windows Mixed Reality Hand Tracking扩展(需保证包版本与2020.3 LTS兼容) - 检查
Packages/manifest.json中com.microsoft.mixedreality.openxr版本,建议使用>=1.4.0的稳定版
- 进入
- 验证设备权限与远程传输设置
- 在Hololens2设备中,确认
Settings > Privacy > Camera权限已授予应用,Settings > Privacy > Speech, inking, & typing > Get to know me处于开启状态 - 远程连接时,在Unity的
Holographic Remoting窗口勾选Stream Input,确保手部输入数据能正常传输到设备
- 在Hololens2设备中,确认
- 替换兼容的手部追踪逻辑
- Unity2019内置XR手部API与OpenXR环境不兼容,需改用OpenXR原生API或适配OpenXR的手部组件,示例代码:
using UnityEngine.XR.OpenXR.Features.Interactions; using UnityEngine.XR.OpenXR; void Update() { var handTrackingFeature = OpenXRSettings.Instance.GetFeature<WindowsMixedRealityHandTrackingFeature>(); if (handTrackingFeature != null && handTrackingFeature.enabled) { bool isLeftHandTracked = handTrackingFeature.GetJoint(TrackedHandJoint.Wrist, UnityEngine.XR.InputDeviceCharacteristics.Left).isValid; bool isRightHandTracked = handTrackingFeature.GetJoint(TrackedHandJoint.Wrist, UnityEngine.XR.InputDeviceCharacteristics.Right).isValid; // 此处添加手部追踪后的业务逻辑 } }
- Unity2019内置XR手部API与OpenXR环境不兼容,需改用OpenXR原生API或适配OpenXR的手部组件,示例代码:
- 清理包依赖冲突
- 对比Unity2019与2020的包列表,移除2020环境中与OpenXR冲突的旧XR包(如旧版本
com.unity.xr.windowsmr) - 执行
Window > Package Manager > Remove Unused Packages清理冗余依赖,重新导入OpenXR相关包
- 对比Unity2019与2020的包列表,移除2020环境中与OpenXR冲突的旧XR包(如旧版本
三、通用兼容性排查
- 确保Hololens2设备系统版本为最新(>=20H2),修复系统层面的XR兼容性问题
- 远程连接前关闭设备上其他XR应用,避免资源抢占
- 重新生成Visual Studio解决方案,确保OpenXR配置正确写入项目文件
内容的提问来源于stack exchange,提问作者sjAugmented
相关产品推荐
相关产品推荐

