Unity中Shader和AssetBundle结合使用的注意事项

Posted 三页菌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity中Shader和AssetBundle结合使用的注意事项相关的知识,希望对你有一定的参考价值。

之前遇到了一件事情就是打包安卓的ab后,unity在editor启动下,加载出来的abshader丢失,其实发布安卓后运行是正常的,当时还纠结了半天,还写了个重新赋值的脚本

下面是unity开发的一些注意事项

 

=======================================================================================

1、我们一般把资源和代码作为两个工程。资源工程导出assetbundle供代码工程使用。这么做主要是防止资源过多导致代码工程启动速度慢,影响开发效率。

2、尽量避免使用Resources文件夹。这个文件夹就相当于一个系统默认的AssetBundle。只不过不能增量更新。它会严重影响打包速度。我们把资源从Resources移出来后,打包时间从半个多小时,减少到2~5分钟。

2、Shader都要加入到Proejct Settings--Graphics--Always Included Shaders中。否则代码工程中没有使用到的Shader可能会被裁剪,导致的问题是Shader丢失。

3、Shader要打包到一个AssetBundle中,即Shader需要指定一个AssetBundle包名。如果Shader没有指定的话,那么每个AB包都会包含这个Shader。一方面造成资源浪费。另一方面当Shader被修改的时候,所有的模型都需要重新导出。另外由于我们代码工程里面肯定也维护了一份Shader,模型实际使用的Shader是它自己包内的,不是代码工程的Shader。

      这里要注意,2和3必须都要做。之前我认为加入到Always Included Shaders中,Unity打包ab的时候就不会打包Shader。然而并不是这样。这个列表只负责预先加载Shader。防止资源被裁剪,以及临时加载造成的卡顿。

4、Unity打包后的Shader是平台相关的,Editor下是无法直接使用的。所以Editor下加载AB包中的模型或特效会出现Shader错误。这个时候需要重新指定一下Shader,即遍历所有的Render把Material的Shader重新附下值。

以上是关于Unity中Shader和AssetBundle结合使用的注意事项的主要内容,如果未能解决你的问题,请参考以下文章

Unity使用Assetbundle加载 实例化一个了模型 材质和原模型的颜色不同,是啥问题??

unity shader打AB,出APK工程的shader丢失问题

Unity5.X打包场景为AssetBundle后,加载场景后烘培灯光贴图不显示

Unity场景打AssetBundle包,加载后天空盒材质丢失问题及解决

UnityShaderVariant的一些探究心得

解决AssetBundle包加载预制体时,Shader显示异常的问题