从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 plain copy
  1. public class FixShader : MonoBehaviour {
  2. private List<Material> thisMaterial;
  3. private List<string> shaders;
  4. void Start ()
  5. {
  6. thisMaterial = new List<Material>(6);
  7. shaders = new List<string>(6);
  8. MeshRenderer[] meshRenderer = GetComponentsInChildren<MeshRenderer>();
  9. int length = meshRenderer.Length;
  10. for (int i = 0; i < length; i++)
  11. {
  12. int count = meshRenderer[i].materials.Length;
  13. for (int j = 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 (int i = 0; i < length; i++)
  23. {
  24. int count = meshSkinRenderer[i].materials.Length;
  25. for (int j = 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( int i = 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的热更新来解决。主要丢失的原因是预加载失败。

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

解决打包AssetBundle时Shader(材质)丢失问题相关推荐

  1. Unity骚操作:Spine动画打包成AssetBundle资源到安卓平台时,材质丢失的问题解决方案

    目录 Spine动画打包成AssetBundle资源到安卓平台时,材质丢失. 如果真的特别需要在u3d编辑器中显示为正常,可以手动在编辑器中的右边Inspector面板重新选择一下材质球的shader ...

  2. unity导入FBX模型时出现材质丢失,模型为白膜的情况

    unity导入FBX模型时出现材质丢失,模型为白膜的情况 导入模型后点击该模型 修改属性即可:

  3. 解决Revit导出FBX模型材质丢失的问题

    初次使用Revit导出fbx格式模型,在导出模型后发现模型材质丢失了,上网查询之后也没到具体原因是什么,不过倒是找到了解决方式:在Revit中安装naviswork插件,然后从revit中导出nwc格 ...

  4. Mac Unity导入FBX模型时出现材质丢失,模型为白膜的情况

    刚开始学习unity,很多地方的都不懂,导入FBX模型,别人电脑上都是正常的,就我的是白膜,为此我还更换了unity编辑器的版本,换了和同事相同的版本,然而并没有什么用,网上的解决方法都试过了,没有效 ...

  5. Unity5.x 依赖关系打包 AssetBundle 研究

    Unity5.x新依赖打包及加载 https://blog.csdn.net/strugglebydreamlin/article/details/78031086 demo:https://pan. ...

  6. Unity打包AssetBundle自动分析资源依赖关系(包括UGUI图集打包)

    https://blog.csdn.net/u012740992/article/details/79371986 怎么分析资源的依赖关系呢,并设置AssetBundleName呢? 我们检测资源之间 ...

  7. unity导入素材时材质丢失素材变成粉红色的解决方法

    有很多时候,当我们通过unity asset store或者blender等等外源导入素材时,会出现材质缺失的bug,如下图所示 : 一个很可能的原因,是由于unity本身管线在每个版本的更新过程中, ...

  8. [Unity]ShaderGraph问题所有材质丢失Maximum number (256) of shader keywords exceeded

    2018.2.18f个人64位 Maximum number (256) of shader keywords exceeded 可能需要删除一些shader 把Edit- ProjectSettin ...

  9. Unity材质丢失?用脚本自动解决吧!

    unity HDRP的editor脚本来处理材质丢失问题 最近初学houdini,发现houdini digital asset导入到unity HDRP中材质出错,平时从max导fbx文件到unit ...

最新文章

  1. Log4Net组件的应用详解
  2. 从C语言的角度重构数据结构系列(三)- 顺序存储结构和链式存储结构之顺序表
  3. 【华为云技术分享】《跟唐老师学习云网络》 - Kubernetes网络实现
  4. 理想汽车,重新定义“召回”
  5. ThinkPHP—URL的访问以及各种方法的操作
  6. Java多线程编程(1)--Java中的线程
  7. 递归 dfs 记忆化搜索 动态规划
  8. ansible 建 kubernetes 证书签名请求_Java中的微信支付(2):API V3 微信平台证书的获取与刷新...
  9. 2层弹出页面刷新中间层
  10. DPDK收发包全景分析
  11. SpringBoot在线预览PDF文件
  12. 人力资源管理系统需求分析报告及系统架构图
  13. 大数据分析方法有哪几种?
  14. #计算机专业权威期刊#
  15. 计算机win10分区软件,完全不需要第三方工具!教你轻松调整Win10硬盘分区
  16. java缓存击穿_对缓存击穿的一点思考
  17. java 及 js 格式化金额 三位一撇(逗号)
  18. EOS DApp 已成黑客提款机
  19. 一、全文检索引擎的介绍
  20. kali linux nmap扫描(二)_商洛学院司徒荆_新浪博客

热门文章

  1. ad18常用快捷键可以修改吗_常用发泡剂之聚氨酯发泡剂在冬季可以用吗?
  2. Java中的Bean是什么?
  3. JavaScript距离当前日期倒计时的方法(Vue项目)
  4. python strip和split_python strip() 函数和 split() 函数的详解及实例
  5. python正则_python中正则匹配
  6. 学习笔记===《用户体验要素——以用户为中心的产品设计》
  7. vue-cli新建工程后提高页面加载速度(含升级webpack4)
  8. linux dialog详解(图形化shell)
  9. type=xhr的500错误
  10. 常用命令-JAVA大数据-Week5-DAY2-linux