Invalid pass number (1) for Graphics.Blit (Unity)

现象描述

有一个后处理脚本在自动打包机(Linux环境)打出的包会包Invalid pass number (1) for Graphics.Blit错误,但是手动打包(Windows环境)打出的包不会出现这个问题。

排查

通过打包日志排查发现,该后处理脚本只有一个Serialized日志,其他Shader除了Serialized日志外还有个编译的日志:

一开始以为是没引用到该Shader问题,但是把他加入到Graphics -> buildin shader settings里面问题依旧,所以应该Shader应该是引用到了

最后通过排查发现Shader中#include "UnityCG.cginc"的大小写写错了

修改之后问题修复

猜测原因是Windows文件名大小写是不敏感的,但是Linux的文件名是大小写敏感,所以导致Linux下include的文件找不到(mac下打包应该也会有这问题)

总结

  • 以后遇到Shader在Windows下打包正常可以使用,Linux或者Mac打包不能使用可以考虑下Shader内部用到的一些include文件大小写问题

番外

之前遇到两个问题跟这个有一定相似

  • 第一个是一个Shader在Unity中正常,但是打出的包无法使用,这个是因为不同图形引擎对于Shader有着不同的要求,该Shader在OpenGLES平台编译报错了(Unity编辑器可以选择图形引擎)导致Android平台该Shader不起作用。(以后有时间可以再开一个博客总结下)
  • 第二个出现图片Android和Unity中都可以正常显示,但是打出的ios包不能使用,最后发现是文件名前面多了空格的问题,这原因都是不同平台之前文件名搜索方式有点不同