【URP】Unity中自定义Render feature后Build模式下shader引用缺失
记录一下最近Unity项目中遇到的令人头大的bug。
问题描述
项目使用URP renderer,引入了自定义的Render feature。 编辑器中运行正常的游戏,在build后一直弹出材质未找到的log。 打开log,发现报错的信息大致如下(节选) Cannot create required material because shader is null UnityEngine.StackTraceUtility:ExtractStackTrace () (at C:/buildslave/unity/build/Runtime/Export/Scripting/StackTrace.cs:37) UnityEngine.DebugLogHandler:LogFormat (UnityEngine.LogType,UnityEngine.Object,string,object[]) UnityEngine.Logger:Log (UnityEngine.LogType,object) UnityEngine.Debug:LogError (object) UnityEngine.Rendering.CoreUtils:CreateEngineMaterial (UnityEngine.Shader) (at D:/Unity Projects/Payback_dev/Library/PackageCache/com.unity.render-pipelines.core@7.5.1/Runtime/Utilities/CoreUtils.cs:817) HologramBlockRenderPass:.ctor ()
分析
注意到log中是自定义的HologramBlockRenderPass中出了问题。这是一个Render feature,引用了自定义的shader,但是这个shader无法引用到,猜测是在build的时候似乎没有被打包进去。
解决方案
网络上搜索到普通Unity项目的解决方法
https://www.likecs.com/show-203395921.html 1.想办法在场景中引用这个shader 2.将shader放入Resources文件夹内,并在Project Setting/Graphics中设置Always include shader.总是引用. 3.assetbundle热更新shader
参考后决定采用第二个方法,具体步骤如下。
- Edit->Project settings->Graphics
- 找到Always included shaders,将size设为相应的大小,并添加render feature里用到的shader
- Build!
|