解决打包AssetBundle时Shader(材质)丢失问题
从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列表里再进行打包即可,然后用下面的脚本的方法去解决:
- public class FixShader : MonoBehaviour {
- private List<Material> thisMaterial;
- private List<string> shaders;
- void Start ()
- {
- thisMaterial = new List<Material>(6);
- shaders = new List<string>(6);
- MeshRenderer[] meshRenderer = GetComponentsInChildren<MeshRenderer>();
- int length = meshRenderer.Length;
- for (int i = 0; i < length; i++)
- {
- int count = meshRenderer[i].materials.Length;
- for (int j = 0; j < count; j++)
- {
- Material _mater = meshRenderer[i].materials[j];
- thisMaterial.Add(_mater);
- shaders.Add(_mater.shader.name);
- }
- }
- SkinnedMeshRenderer[] meshSkinRenderer = GetComponentsInChildren<SkinnedMeshRenderer>();
- length = meshSkinRenderer.Length;
- for (int i = 0; i < length; i++)
- {
- int count = meshSkinRenderer[i].materials.Length;
- for (int j = 0; j < count; j++)
- {
- Material _mater = meshSkinRenderer[i].materials[j];
- thisMaterial.Add(_mater);
- shaders.Add(_mater.shader.name);
- }
- }
- for( int i = 0; i < thisMaterial.Count; i++)
- {
- thisMaterial[i].shader = Shader.Find(shaders[i]);
- }
- }
- }
这样是解决了丢失问题,但是自己编写一个shader,或者使用一个shader时,总不能每次都用去进行Editor->Graphics Settings里去添加shader,然后在进行发包。如果不进行添加或者忘记添加,发布在移动设备后还是会丢失。
那对于编辑的shader的解决方法是
1.依赖打包
2.shader放到Resources文件夹,必须是Resources文件夹里。
对于资源的热更新,难免有新的shader进行使用,要考虑到对shader的热更新来解决。主要丢失的原因是预加载失败。
如有不当之处,还请指教补充。
解决打包AssetBundle时Shader(材质)丢失问题相关推荐
- Unity骚操作:Spine动画打包成AssetBundle资源到安卓平台时,材质丢失的问题解决方案
目录 Spine动画打包成AssetBundle资源到安卓平台时,材质丢失. 如果真的特别需要在u3d编辑器中显示为正常,可以手动在编辑器中的右边Inspector面板重新选择一下材质球的shader ...
- unity导入FBX模型时出现材质丢失,模型为白膜的情况
unity导入FBX模型时出现材质丢失,模型为白膜的情况 导入模型后点击该模型 修改属性即可:
- 解决Revit导出FBX模型材质丢失的问题
初次使用Revit导出fbx格式模型,在导出模型后发现模型材质丢失了,上网查询之后也没到具体原因是什么,不过倒是找到了解决方式:在Revit中安装naviswork插件,然后从revit中导出nwc格 ...
- Mac Unity导入FBX模型时出现材质丢失,模型为白膜的情况
刚开始学习unity,很多地方的都不懂,导入FBX模型,别人电脑上都是正常的,就我的是白膜,为此我还更换了unity编辑器的版本,换了和同事相同的版本,然而并没有什么用,网上的解决方法都试过了,没有效 ...
- Unity5.x 依赖关系打包 AssetBundle 研究
Unity5.x新依赖打包及加载 https://blog.csdn.net/strugglebydreamlin/article/details/78031086 demo:https://pan. ...
- Unity打包AssetBundle自动分析资源依赖关系(包括UGUI图集打包)
https://blog.csdn.net/u012740992/article/details/79371986 怎么分析资源的依赖关系呢,并设置AssetBundleName呢? 我们检测资源之间 ...
- unity导入素材时材质丢失素材变成粉红色的解决方法
有很多时候,当我们通过unity asset store或者blender等等外源导入素材时,会出现材质缺失的bug,如下图所示 : 一个很可能的原因,是由于unity本身管线在每个版本的更新过程中, ...
- [Unity]ShaderGraph问题所有材质丢失Maximum number (256) of shader keywords exceeded
2018.2.18f个人64位 Maximum number (256) of shader keywords exceeded 可能需要删除一些shader 把Edit- ProjectSettin ...
- Unity材质丢失?用脚本自动解决吧!
unity HDRP的editor脚本来处理材质丢失问题 最近初学houdini,发现houdini digital asset导入到unity HDRP中材质出错,平时从max导fbx文件到unit ...
最新文章
- Log4Net组件的应用详解
- 从C语言的角度重构数据结构系列(三)- 顺序存储结构和链式存储结构之顺序表
- 【华为云技术分享】《跟唐老师学习云网络》 - Kubernetes网络实现
- 理想汽车,重新定义“召回”
- ThinkPHP—URL的访问以及各种方法的操作
- Java多线程编程(1)--Java中的线程
- 递归 dfs 记忆化搜索 动态规划
- ansible 建 kubernetes 证书签名请求_Java中的微信支付(2):API V3 微信平台证书的获取与刷新...
- 2层弹出页面刷新中间层
- DPDK收发包全景分析
- SpringBoot在线预览PDF文件
- 人力资源管理系统需求分析报告及系统架构图
- 大数据分析方法有哪几种?
- #计算机专业权威期刊#
- 计算机win10分区软件,完全不需要第三方工具!教你轻松调整Win10硬盘分区
- java缓存击穿_对缓存击穿的一点思考
- java 及 js 格式化金额 三位一撇(逗号)
- EOS DApp 已成黑客提款机
- 一、全文检索引擎的介绍
- kali linux nmap扫描(二)_商洛学院司徒荆_新浪博客
热门文章
- ad18常用快捷键可以修改吗_常用发泡剂之聚氨酯发泡剂在冬季可以用吗?
- Java中的Bean是什么?
- JavaScript距离当前日期倒计时的方法(Vue项目)
- python strip和split_python strip() 函数和 split() 函数的详解及实例
- python正则_python中正则匹配
- 学习笔记===《用户体验要素——以用户为中心的产品设计》
- vue-cli新建工程后提高页面加载速度(含升级webpack4)
- linux dialog详解(图形化shell)
- type=xhr的500错误
- 常用命令-JAVA大数据-Week5-DAY2-linux