在测试Shader性能的时候,打包到真机上测试是不可少的。但在一次打包APK时安装,打开程序竟然发现本应该生成的物体都不渲染了,但是在Debug的输出UI上确确实实生成了固定数量的物体,而它们的MeshRender却没有任何渲染,但在编辑器确实可以正常渲染的。
经过反复的测试与寻求解决,我的Shader有两个问题,也可能会是其他人出现的问题。
第一:Shader变量精度问题。
对于材质界面显示Toggle相信是很多人使用的,为了节省传递参数的精度,我采用了Integer整形属性,用int声明了变量。我猜测可能是int类型实际上还是float类型支持的,所以与Integer整形属性有偏差导致不显示问题,在我修改Interger为float后是能够在真机上正常现实的。
第二:变体shader_feature未打包
这个问题是我一开始寻找的方向,但是在我一次次尝试解决时,仍然没有解决,所以我怀疑不是这个问题,所以就出现了第一种情况。但是再确保第一种情况没有问题,当我再加入shader_feature变体功能后,又出现了一样的问题。所以变体也还是有问题。
网上对于shader_feature打包问题有比较多的内容了,就不详细说了,解决方法就是ShaderVariantCollection来收集变体,然后收集场景中所以shader变体,然后在GraphicSetting种PreLoad这个ShaderVariantCollection就可了