Unity开发Hololens 2应用时MRTK按钮显示粉色伴加载报错的排障咨询
HoloLens 2 MRTK工具箱按钮显示粉色问题处理
基础现象
- 开发环境为面向HoloLens 2的Unity项目,已通过MRTK工具箱向场景添加按钮组件
- 异常表现:按钮的交互、点击逻辑运行完全正常,但按钮材质统一呈现Unity中典型的粉色提示效果(代表着色器未正常加载)
- 参考素材:
已完成的排查动作
每次操作后均按编辑器提示完成TextMesh Pro基础资源导入,依次执行以下操作均未解决问题:
- 切换不同项目构建平台
- 启用Windows Mixed Reality平台下的全部可选功能
- 分别在Unity 2019.4.24f1、Unity 2020.3.1f1版本下创建全新空项目复现问题
- 删除项目Library文件夹重新生成全量缓存
伴随的稳定报错
无论在原有项目还是全新创建的空项目中,该报错都会稳定出现,核心堆栈信息如下:
System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Projekte\MyHololens\poc-3d-visualisierung-hololens\ButtonTest\Library\PackageCache\com.microsoft.mixedreality.toolkit.foundation@5db3df152788-1616077456490\SDK\Experimental\InteractiveElement\Examples\Scripts\CustomStateExample\KeyboardState'. at System.IO.__Error.WinIOError (System.Int32 errorCode, System.String maybeFullPath) at Microsoft.MixedReality.Toolkit.Utilities.Editor.OnLoadUtilities.FindShaderFolderInPackage () at Microsoft.MixedReality.Toolkit.Utilities.Editor.OnLoadUtilities.EnsureShaders (System.Boolean bypassIgnore) at Microsoft.MixedReality.Toolkit.Utilities.Editor.OnLoadUtilities..cctor () UnityEditor.EditorAssemblies:ProcessInitializeOnLoadAttributes (System.Type[])
这个报错的触发逻辑很明确:MRTK标准资源包在编辑器启动阶段会自动扫描包内文件路径,定位内置的MRTK专用着色器;扫描过程中代码会尝试访问一个已经不存在的实验性示例目录,直接打断了整个着色器初始化流程,所有用了MRTK内置着色器的材质就会触发Unity默认的粉色占位显示——这也是为什么交互功能完全正常,只有显示出问题的核心原因。
针对性排障操作
- 对齐MRTK配套包的版本
从报错的包哈希值可以判断,当前安装的是MRTK 2.7.0预览版本,这个版本存在已知的逻辑缺陷:扫描文件路径时会尝试查找已被移除的实验性示例目录,直接触发路径找不到的异常。把MRTK Foundation、Standard Assets、Tools三个互相关联的包统一升级到2.7.2及以上的稳定正式版,就能直接修复这个扫描逻辑的bug。 - 手动触发着色器加载
打开Unity项目设置里的图形配置面板(路径为Edit > Project Settings > Graphics),在Always Included Shaders的强制加载列表里,手动添加MRTK的两个核心着色器:Mixed Reality Toolkit/Standard、适配TextMesh Pro文本的MRTK专用着色器,保存配置后重启编辑器,就能绕开出问题的自动扫描流程,强制完成所有MRTK着色器的编译加载。 - 规避Windows路径长度限制
从报错的路径可以看到,项目嵌套在多层目录下,Windows系统默认有260字符的路径长度上限,一旦路径超过长度限制,系统会直接判定深层的PackageCache目录不存在,触发找不到路径的报错。可以把项目整体移动到磁盘根目录下的浅层路径(比如C:\HoloLensTest\),重新用Unity打开项目,就能避开长路径的影响。
内容的提问来源于stack exchange,提问作者Salatgurke
相关产品推荐
相关产品推荐



