新项目有些shader是复用之前旧项目,在旧项目(基于unity4.7.2)上运行好好的,新项目发布安卓是正常的,但是发布ios平台就会出现丢失情况。
Google了一下类似的情况,发现网上有两种解决方案。一是把shader加入Graphics Settings,然后代码中对shader进行动态赋值。二是打包后把对应的shader放到Resources文件夹。第一种情况也是自己旧项目采用的方案,因为4.x的依赖打包有bug,只能自己做依赖,可以很方便去对shader赋值。但是现在unity5版本的打包依赖已经很强大了,完全不想再动态去修改。第二种情况没有测试过,其次对热更新不友好,不在考虑之中。
初步的解决思路认为是编辑器升级后旧版本shader的兼容性导致的,立马把旧项目的shader全部按unity5.5版本重写了一遍,问题依旧。
重新理了一下思路,发现有少数部分shader是表现正常未丢失的,对比了一下正常跟不正常的shader,不正常的shader文件名字有空格,果断去掉空格后重新发布ios平台测试,问题修复了。看来命名很重要,然而官方部分shader命名也是有空格的,这是一个坑嘛?
整个问题和解决过程小结一下,项目把shader单独打包,引用shader的资源会依赖shader资源包,shader并不需要加入Graphics Settings和Resources文件夹,只要保证shader文件命名没有空格,加载时保证被依赖的shader有优先加载,那结果就会是正常的。
网友评论