问题一、从AssetBundle中读取的shader丢失(显示粉红色)?
shader分为两种,一种是unity内建shader,在unity的安装目录;另一种是自定义的shader,在unity项目中。
对于内建shader,如果AssetBundle中的模型有用到,则需要在 Always Included Shaders 列表(Edit->Project Settings -> Graphics ->Always Included Shaders)中添加进去(对于Standard这样的shader,据说添加进去后会自动将它的一系列变体加入,这里并没有测试过。),例如:
对于自定义的 Shader 在打包 AssetBundle 的时候,如果有物体用到,这个 Shader 就会自动打包进去,无需单独处理。
如果打包AssetBundle工程和读取工程不是同一个,那么要确保两点:
1. 保持上面提到的 Always Included Shaders 列表一致,否则可能出现某些shader无法找到的问题;
2. 对应编译平台中 Player Settings 的 Graphics APIs 必须保持一致,OpenGLES2或者OpenGLES3或者都有,不能多也不能少。例如:
问题二、在 Unity Editor 中显示的 AssetBundle 中的 Shader 异常?
Shader 并没有出现粉红色,而是很奇怪的问题,可能双面可见的透明效果变成了单面半透明。这个是 Unity 自身的原因,在 Android 或者 iPhone 真机上运行是正常的。
参考文章:
Unity5.x shader打包AssetBundle总结