Unity 在底层默认希望为你做尽可能多的优化,降低使用门槛,比如 BuildSetting 中的 Optimize Mesh Data 选项就是一个典型的例子。
这个选项到底有什么用呢?文档描述为:
Optimize Mesh Data Remove any data from meshes that is not required by the material applied to them (tangents, normals, colors, UV).
即是说:如果开启了此选项,将会在 Build 过程中根据场景中 Mesh 所使用的材质(或者说 shader)进行静态分析,来去掉 Mesh 中“无用”的数据(材质不使用的数据),比如:切线,发现,定点色,多余的 uv 等,以此减少数据量和最终构建的游戏包的大小。
这是一个非常好的功能,如果 unity 不提供自己写插件恐怕还是比较麻烦的,但是在使用过程中有没有“坑”呢?有没有要注意的地方呢?答案当然是:有!
如果你在场景中有动态切换材质(主要是 shader 的改变),比如原始模型中带有法线,默认的材质没有使用法线,但是动态切换的材质却需要使用法线,那么你得注意很可能在编辑器中运行正常,一旦发布到真机就会出现很怪异的现象,会让人以为是 shader 在不同平台的兼容性或者数据精度等问题。譬如描边效果就是一个很好的例子。
结论:如果使用此选项,请务必注意自己动态切换材质的游戏对象是否在场景中以静态的形式存在,shader 使用了哪些模型的数据,并根据实际情况做相应的调整。