You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity场景运行时能否创建新的HoloLens 2沉浸式视图

结论

你的判断完全正确。
HoloLens 2 系统全局仅维护一个活跃的沉浸式视图(独占全息渲染会话),Unity 编译生成的UWP应用启动后会第一时间抢占该唯一会话的所有权。你在Unity运行过程中从原生C++插件侧尝试初始化新的沉浸式视图时,系统会直接阻塞初始化流程、拒绝分配对应的渲染和线程资源,这就是你始终拿不到初始化执行结果的根本原因,和线程申请逻辑本身无关。

可落地的解决路径
  • 全量替换Unity渲染场景:先主动释放Unity持有的沉浸式会话所有权,再执行原生视图初始化。先在C#层调用UnityEngine.XR.Management.XRGeneralSettings.Instance.Manager.StopXRShutdown()完全关闭Unity XR管线,等待200ms左右待系统回收完会话资源后,再通过封装层调用原生侧的immersiveView.init()即可正常完成初始化。后续需要切回Unity内容时,重新调用XR管理类的初始化启动接口即可。
  • 在Unity场景内叠加原生渲染内容:不需要创建独立沉浸式视图。通过Unity原生插件的导出接口,直接从Unity运行时拿到当前正在使用的HolographicSpace实例、D3D设备指针,把你的原生渲染逻辑注册到Unity的渲染回调事件中,在Unity的渲染线程上提交自定义图元即可,这种方式不会和Unity争抢会话所有权,性能和稳定性都最优。
  • 独立功能模块跳转:如果你的自定义沉浸式视图是完全独立的功能,不要放在Unity主进程内初始化。将原生沉浸式视图逻辑打包为独立UWP应用,通过UWP协议激活的方式从Unity应用跳转至该应用,功能结束后再协议跳回Unity,由系统负责两个应用间的沉浸式会话切换,完全规避同进程的资源冲突。

排查验证技巧:在原生immersiveView.init()的调用位置加错误码捕获,当系统存在活跃沉浸式视图时,接口会返回ERROR_ACCESS_DENIED,可以直接确认是会话占用导致的初始化失败。

内容的提问来源于stack exchange,提问作者Ali Can KESKİN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 09:27:14