解决打包AssetBundle时Shader(材质)丢失问题

论坛 期权论坛 脚本     
匿名网站用户   2020-12-20 22:32   11   0

从Unity4.2开始,为了减少首包大小,不会默认将所有Shader引擎加到游戏程序中,据Unity技术支持人员所说,

Unity会将Shader引擎打包到Assetbundle资源中,但是我测试发现不行(可能是我打开方式不对...),

不过只要将用到的Shader加到Editor->Graphics Settings的Shader列表里再进行打包即可。

直奔问题,unity的assetbundle是对资源的管理方式,但是会有一些注意的地方,

对于具体的打包的使用详细看Unity AssetBundle爬坑手记

下面说一下依赖打包后对于移动设备上出现的一个问题:

依赖打包后,进行加载时却发现丢失,但是贴图信息还在。如图:


在发现对于shader却报了一个错


目前错误是使用的unity的unlit/transparent cutout,通常我们的解决办法是,在将用到的Shader加到Editor->Graphics Settings

的Shader列表里再进行打包即可,然后用下面的脚本的方法去解决:

[csharp]view plaincopy
  1. publicclassFixShader:MonoBehaviour{
  2. privateList<Material>thisMaterial;
  3. privateList<string>shaders;
  4. voidStart()
  5. {
  6. thisMaterial=newList<Material>(6);
  7. shaders=newList<string>(6);
  8. MeshRenderer[]meshRenderer=GetComponentsInChildren<MeshRenderer>();
  9. intlength=meshRenderer.Length;
  10. for(inti=0;i<length;i++)
  11. {
  12. intcount=meshRenderer[i].materials.Length;
  13. for(intj=0;j<count;j++)
  14. {
  15. Material_mater=meshRenderer[i].materials[j];
  16. thisMaterial.Add(_mater);
  17. shaders.Add(_mater.shader.name);
  18. }
  19. }
  20. SkinnedMeshRenderer[]meshSkinRenderer=GetComponentsInChildren<SkinnedMeshRenderer>();
  21. length=meshSkinRenderer.Length;
  22. for(inti=0;i<length;i++)
  23. {
  24. intcount=meshSkinRenderer[i].materials.Length;
  25. for(intj=0;j<count;j++)
  26. {
  27. Material_mater=meshSkinRenderer[i].materials[j];
  28. thisMaterial.Add(_mater);
  29. shaders.Add(_mater.shader.name);
  30. }
  31. }
  32. for(inti=0;i<thisMaterial.Count;i++)
  33. {
  34. thisMaterial[i].shader=Shader.Find(shaders[i]);
  35. }
  36. }
  37. }
这样是解决了丢失问题,但是自己编写一个shader,或者使用一个shader时,总不能每次都用去进行Editor->Graphics Settings里去添加shader,然后在进行发包。如果不进行添加或者忘记添加,发布在移动设备后还是会丢失。

那对于编辑的shader的解决方法是

1.依赖打包
2.shader放到Resources文件夹,必须是Resources文件夹里。

对于资源的热更新,难免有新的shader进行使用,要考虑到对shader的热更新来解决。主要丢失的原因是预加载失败。

如有不当之处,还请指教补充。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1136255
帖子:227251
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP