关于Unity5.x版本AssetBundle打包Shader的问题

转载请注明出处!
  打包AssetBundle时,不注意的话,某些Shader是无法打包到AssetBundle中的。这两天一直被这个问题困扰,抽空就研究了一下。
  Unity打包Assetbundle时,要想将Shader一起打包,需要注意两种Shader:项目中自建的Shader文件和Unity内置的Shader文件。自建的Shader文件在Unity项目中是可以看到的,而Unity内置的Shader文件只能在项目中使用,但是项目中找不到这个文件,因为这个文件是在Unity的安装目录中,然后在Unity项目中通过某种映射关系来引用内置Shader。
  So...问题来了...
  项目中自建的Shader文件可以设置AssetBundle名称,然后进行打包,而内置的Shader根本无法设置Assetbundle名称,也就是说一般的打包方法是无法将内置的Shader进行打包的, 从而导致使用的内置Shader的材质球,从AssetBundle中加载出来后,会出现材质球丢失的情况。
  对应这个问题的解决方法,我简单研究了一下,打包前可以将Unity的内置Shader设置一下,让Unity自己能够识别到哪些内置Shader是需要被打包出来的。具体方法如下:
  1、依次点击菜单栏的 Edit -> Project Settings -> Graphics,然后在Inspector面板中会出现关于内置Shader的设置(“Built-in shader setting”)和Shader分离设置(“Shader stripping”)。
  2、其中上方的 Built-in shader setting的选项就是关于内置Shader的设置,这里只说明关于打包的操作,其中有一个将Always Included Shaders的数组,将需要打包的内置Shader 添加在这里即可。例如我要将名为Particles/Additive的内置Shader添加到里面,需要将数组的size增加1,然后在多出来的数组元素中选择 Particles/Additive即可。
 
  这时候再进行打包,就可以将内置Shader包含在打包文件中了。这应该也是Unity打包内置Shader的正确操作了。
  扩展: Shader分离设置(“Shader stripping”)里面主要是关于烘培的灯光贴图打包的设置,一般的操作是:"Lightmap modes"选择"Manual",然后点击下面出现的"From current scene"按钮即可,Unity会更具当前的烘培贴图来自动适配设置。
  如果有错误的地方,望大家指正。

你可能感兴趣的:(Unity3D)