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

Unity构建版中Siccity.GLTFUtility Shader加载失败致模型无法加载

Unity构建后GLB/GLTF模型加载失败(ArgumentNullException: Shader为空)

问题概况

  • 开发Windows平台Unity桌面应用,运行时从磁盘加载glb/gltf格式3D模型
  • Unity编辑器内运行正常,但构建后模型无法加载
  • 使用Siccity.GLTFUtility库加载,Player.log报错ArgumentNullException,提示参数shader为空

已尝试方案

  • 将相关Shader添加到Always Included Shaders
  • 设置Instancing Variants为Keep All
  • 保存Shader资产并添加到Preloaded Shaders
  • 调整默认质量等级为Very Low
  • 禁用Optimize Mesh Data
  • 尝试官方推荐的多线程加载方式,但编辑器中也失败

解决建议

1. 确保GLTFUtility自带Shader被完全包含进构建

打开Edit > Project Settings > Graphics,在Always Included Shaders列表中,添加GLTFUtility库所有相关的Shader(可在Project窗口搜索GLTFUtility筛选出对应Shader)。很多时候只添加了自定义Shader,却遗漏了库本身依赖的Shader,导致构建时被Unity优化剔除。

2. 强制标记Shader为构建包含项

选中GLTFUtility的Shader文件,右键选择Asset Labels > Add Label > Always Included,确保这些Shader被Unity明确标记为必须打包的资源,避免被构建剥离机制误删。

3. 在加载代码中指定Fallback Shader

修改GLTFUtility的加载代码,手动指定一个Unity自带且肯定会被打包的Shader作为 fallback,比如Standard Shader:

using Siccity.GLTFUtility;
// ...
var importSettings = new ImportSettings();
importSettings.ShaderOverride = Shader.Find("Standard");
GLTFSceneImporter.ImportAsync(yourModelPath, importSettings);

这样即使库的Shader未被正确打包,也会用指定的Shader替代,避免空引用报错。

4. 关闭Shader Stripping优化

打开Edit > Project Settings > Graphics > Shader Stripping,将Strip unused variants设置为Disabled,防止Unity剔除GLTFUtility需要的Shader变体。同时关闭Optimize Shaders for GPU,避免GPU优化导致Shader异常。

5. 重新导入库与资产

备份项目后,删除根目录的Library文件夹,重新打开Unity让其重新导入所有资产。这能解决因资产缓存异常导致的Shader引用问题。

6. 验证模型的Shader引用

用第三方GLTFViewer打开你的glb/gltf模型,检查模型自带的Shader名称,确保Unity中存在对应Shader,且该Shader已被加入Always Included Shaders。部分模型可能引用了自定义Shader,需额外处理。

内容的提问来源于stack exchange,提问作者Malindu Kumaradasa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:15:13