码迷,mamicode.com
首页 > 其他好文 > 详细

关于AssetBundle,Shader丢失的问题

时间:2015-07-26 15:45:09      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:unity3d

从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文件夹里。


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





 

版权声明:本文为博主原创文章,未经博主允许不得转载。

关于AssetBundle,Shader丢失的问题

标签:unity3d

原文地址:http://blog.csdn.net/fanglrui/article/details/47068055

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!