已知问题、常见问题解答和调试指南¶
已知问题 (Unity 插件)¶
- 控制器支持仅限于 Oculus Quest
其他控制器可以工作,但显示不正确
- 示例代码中的问题
自动连接示例需要在编译时指定 IP 地址
Lobby UI 示例仅在 Oculus Quest 上测试通过(使用 Quest 屏幕键盘)
- CxruReprojection.shader 问题
垂直条带失真:某些或所有平台都表现出“模糊感”,形式为 6-10 个规则间隔的垂直失真条带
斑点:少量像素显示随机噪声,在黑暗场景中明显
输入停滞时的掉头:如果输入姿势被冻结并且 HMD 完全“转了一圈”,则着色器显示帧的失真版本而不是正确的黑色
- 需要基于 Unity OpenXR 的插件提供程序
目前,此插件使用 Unity 的 OpenXR 插件直接从运行时获取性能关键的姿势信息
插件提供程序(如 ARCore 和 OculusXR)目前不支持不使用 OpenXR 的
- 仅限 CloudXR 4.0
此插件不适用于以前版本的 CloudXR,并且仅在 CloudXR 4.0 上进行了测试
- 与 Unity 多线程渲染不兼容
默认情况下启用,这将导致各种问题并且无法正常工作。
- Unity 的
runInBackground
设置位于 ProjectSettings/ProjectSettings.asset
需要设置为1
,以便在 Oculus 系统菜单期间 HMD 变换正确
- Unity 的
适用于 Unity 2.0 的 HTC VIVE OpenXR (移动) 插件 - 不再包含
libc++_shared.so
- 现在需要软件包的“标准”版本(而不是sans-libc++
变体)
常见问题解答¶
- 我可以制作平板电脑 AR 客户端吗?
尚未。 平板电脑 AR 支持是我们最高优先级的即将推出的功能。
调试指南¶
- CXRU_HMD 未定义
- 症状
首次导入 CloudXR 包时出现编译错误
- 问题
必须定义 CXRU_HMD 或(将来)CXRU_TABLET 以选择插件中正确的代码路径
- 解决方法
项目设置 > 播放器 > 其他设置
在条件编译定义的列表中定义一个新符号 CXRU_HMD
- CloudXR 调优姿势捕捉未启用
- 症状
logcat: 错误 Unity DllNotFoundException: 无法加载 DLL ‘libCloudxrClientlibCsharp.so’ (持续)
- 问题
Unity 未能确定提供的 AAR 中的库是必需的,并且未包含它们
- 解决方法
确保在“项目设置 > OpenXR > OpenXR 功能组”中启用了“CloudXR 调优姿势捕捉”功能
- HMD 原点不正确
- 症状
HMD 位于远程环境的“地板”上
- 问题
OpenXR 姿势未与 Unity 姿势对齐
- 解决方法
在场景中的 XR Rig/Origin 对象上将“跟踪原点模式”设置为“设备”
- 渲染顺序不正确
- 症状
(本地)场景中的对象在流式传输期间无法渲染(例如,混合现实工具包 UI 对象)
- 问题
CloudXR 示例渲染器功能/着色器正在“覆盖”其他渲染对象
- 解决方法
选项 1:在所有要渲染在“顶部”的对象上使用“UI”层
- 选项 2:将“渲染对象”渲染器添加到 URP-Performant-Renderer(或“项目窗口 > 设置”中的正确 URP 渲染器设置)
将事件设置为“AfterRenderingTransparents”,这将强制其在 CxruRendererFeature 运行之后,将本地对象渲染在流式像素之上
- MainCamera 问题
- 症状
- logcat 中有很多此类错误
Unity NullReferenceException:对象引用未设置为对象的实例。
Unity at CxruClientSampleOculusUI.UpdatePlatform () [0x00000] in <00000000000000000000000000000000>:0
Unity at CxruClientSampleOculusUI.Update () [0x00000] in <00000000000000000000000000000000>:0
在 HMD 内部,视图可能被“锁定”
- 问题
MainCamera 配置不正确
- 解决方法
确保场景中只有一个标记为 MainCamera 的相机
确保 MainCamera 连接到 XR Origin 或 XR Rig
确保 CloudXRManager.cs 在该相机对象上处于活动状态
- Android 互联网权限缺失
- 症状
为 Android HMD 构建
无法调试的连接到 CloudXR 服务器的失败
在 Package Manager 中,OpenXR 插件的版本为 1.8.2(或可能更高)
- 检查导出的 Android Studio 项目,AndroidManifest.xml 不包含互联网权限
即使在“项目 > 播放器设置”中启用了此权限
- 问题
从 OpenXR 插件 1.8.2 开始,Unity 为内置的 Android Meta Quest 支持功能添加了深入设置,其中包括默认情况下启用的“强制禁用互联网权限”(原因我不知道)。
不幸的是,此强制禁用互联网功能(错误地)应用于任何 Android 平台,无论 Quest 支持功能本身是否启用。因此,由此产生的任何 APK 都永远无法连接到 CloudXR 服务器。
- 解决方法
项目设置 > XR 插件管理 > OpenXR
- OpenXR 功能组 > Meta Quest 支持
查找此项右侧的齿轮图标
查找并禁用“强制删除互联网权限”
- libc++_shared.so 冲突
- 症状
- 为这些 Android 平台构建
HTC VIVE OpenXR - Android
Qualcomm Spandragon Spaces SDK for Unity
任何其他包含 libc++_shared.so 的平台
- 构建失败,出现 Gradle 错误
找到多个具有操作系统独立路径 ‘lib/arm64-v8a/libc++_shared.so’ 的文件
- 问题
CloudXR 组合 AAR 库包含一个随附 lib_c++_shared.so` 版本的库
这些平台的 Unity 插件包也附带 lib_c++_shared.so 版本
只能包含一个
- 解决方法
使用主 CloudXR 客户端 Unity 插件的 sans-libc++ 变体(不包括 libc++_shared.so)
- 理由
假设:所有 libc++_shared.so 文件都来自类似版本的 Android NDK
观察:libc++_shared.so 上存在实际的名称冲突(即,没有 libstdc++_shared.so 或类似文件)
结果:所有 libc++_shared.so 库都来自相同的实现,并且在 ABI 和实现上都兼容
因此:任何 libc++_shared.so 文件都可以用作组合 AAR 或最终 APK 中唯一允许的共享 libc++ 实现。
- Android run-in-background 未设置
- 症状
在 Oculus(以及可能的其他 Android 平台)上,按(右手)系统菜单
移动头部
系统菜单“跟踪”正确,Unity 跟踪错误
- 问题
不确定;可能是 Unity、Android、XR 运行时之间的问题
- 解决方法
编辑此文件:ProjectSettings/ProjectSettings.asset
将 runInBackground 的值从 0 更改为 1