Unity2017版本关于shader和模型分开打包

现在使用的Unity制作的游戏基本上都在使用AssetBundle,但是AssetBundle有很多坑,一个比较常见的坑就是会使包体变大,而且占用的内存和显存都会变高。

把shader和模型分开打包就是为了解决这个问题,关于这个问题的详细说明可以参考这篇文章:http://gad.qq.com/article/detail/37547,但是这篇文章有些问题和我的实测不符(可能是版本的问题)

1.GraphicsSetting-> always included shader

    这个选项无论是依赖打包还是非依赖打包都不需要设置

2.没有说明怎么把shader和模型采用依赖的方式打包

    由于2017版本对打包进行了简化,不能在直接使用脚本进行依赖设置,而是通过先后顺序产生关联,Unity会自动检测资源之间的关联关系(不需要再手动设置)。所以有依赖关系的资源打包除了先后顺序之外还要注意的一点就是必须通过AssetBundleBuild数组一次性传给BuildPipeline.BuildAssetBundles(也就是说不能像非依赖打包一样每个资源可以单独调用BuildPipeline.BuildAssetBundles来单独打包一个文件

        List<AssetBundleBuild> builds = new List<AssetBundleBuild>();
        builds.AddRange(GetBuildMap("Shader", true));
        builds.AddRange(GetBuildMap("Character/Female/Model/Cloth", false));
        builds.AddRange(GetBuildMap("Character/Female/Model/Hair", false));


        BuildAssetBundleOptions option = BuildAssetBundleOptions.ChunkBasedCompression |
                                    BuildAssetBundleOptions.ForceRebuildAssetBundle;
        BuildPipeline.BuildAssetBundles(_bundlePath, builds.ToArray(), option, EditorUserBuildSettings.activeBuildTarget);

3.怎么在编辑器模式正常显示模型

    只需要在游戏启动时就加载shader包,然后在加载对应模型的时候重新制定以下shader就行了

#if UNITY_EDITOR
            var renders = gameObject.GetComponentsInChildren<SkinnedMeshRenderer>();
            foreach (var r in renders) {
                for (int n = 0; n < r.sharedMaterials.Length; ++n) {
                    Material mat = r.sharedMaterials[n];
                    var shaderName = mat.shader.name;
                    var newShader = Shader.Find(shaderName);
                    if (newShader != null) {
                        mat.shader = newShader;
                    }
                    else {
                        Debug.LogWarning("unable to refresh shader: " + shaderName + " in material " + mat.name);
                    }
                }
            }
#endif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值