关于AssetBundle,Shader丢失的问题
2015-07-26 15:27
537 查看
从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列表里再进行打包即可,然后用下面的脚本的方法去解决:
那对于编辑的shader的解决方法是
1.依赖打包
2.shader放到Resources文件夹,必须是Resources文件夹里。
对于资源的热更新,难免有新的shader进行使用,要考虑到对shader的热更新来解决。主要丢失的原因是预加载失败。
如有不当之处,还请指教补充。
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的热更新来解决。主要丢失的原因是预加载失败。
如有不当之处,还请指教补充。
相关文章推荐
- Kinect结合Unity3D引擎开发体感游戏(一)
- Unity3D中脚本的执行顺序和编译顺序
- Unity3D动态对象优化代码分享
- unity3d发布apk在android虚拟机中运行的详细步骤(unity3d导出android apk)
- Unity3D游戏引擎实现在Android中打开WebView的实例
- unity3d调用手机或电脑摄像头
- 分享一个开源的网络游戏服务器架构—HouHai
- Unity3D插件详细评测及教学下载
- Unity3D上路_01-2D太空射击游戏
- Unity3D上路_02-第一视角射击游戏
- Unity3D上路_03-塔防游戏
- Unity3D上路_04-基础资源介绍
- Unity3D上路_05-网络相关
- Unity3d TransformPoint 函数研究
- Unity3d 动态加载fbx模型文件
- unity3d地形系统总结