Unity3D资源管理——Unity2017 Assetbundle依赖打包

http://gad.qq.com/article/detail/289272

一、运行环境

1.1编辑器版本

使用Unity2017.3.1f

1.2 dll

二、目的

预制体打包时会将一份资源进行多份打包,导致数据冗余,所以需要根据依赖,将被多处引用的资源独立达成一个包,建立依赖关心,优化冗余。

三、流程

1. 遍历所有资源文件,设置其包名为空

2. 遍历需要打包的文件夹下的所有文件,通过Unity资源接口获取所有依赖,统计对应的依赖数

3. 将在需要打包文件夹内的包名设置为文件名,将在需要打包文件夹外的依赖数大于2的文件设置包名为文件名

4. 调用Unity的打包接口,会将该工程下的所有被设置包名的资源进行AB打包。

四、代码实现

核心代码:

public class ABUtils
    /// <summary>
    /// 资源放置的文件夹路径
    /// </summary>
    private static List<string> resDircectoryPaths = new List<string>(){ "Assets/Resources" };
    private static List<string> needDependenyPaths = new List<string>() { "Assets/Resources/Materials" };
    /// <summary>
    /// 初始化打包环境,将所有的文件的ab属性都置空
    /// </summary>
    static List<string> InitBuildEnvironment()
        List<string> paths=new List<string>();
        string[] files = AssetDatabase.GetAllAssetPaths();
        for (int i = 0; i < files.Length; i++)
            for (int j = 0; j < resDircectoryPaths.Count; j++)
                if (files[i].Contains(resDircectoryPaths[j]))
                    AssetImporter importer = AssetImporter.GetAtPath(files[i]);
                    paths.Add(files[i]);
                    importer.assetBundleName = String.Empty;
        return paths;
    public static void BuildAllAbAboutDependency(string outPath)
        ResourceSystem.FileUtils.PrecessDirectoryExist(outPath);
        List<string> resPaths=InitBuildEnvironment();
        string fileName;
        string relationPath;
        ResourcesData data;
        bool isNeedDependcy;
        for (int i = 0; i < resPaths.Count; i++)
            isNeedDependcy = false;
            fileName = PathUtils.GetFileNameWithoutExtension(resPaths[i]);
            if (ResourceSystemFacade.Inst.ResDict.ContainsKey(fileName))
                data = ResourceSystemFacade.Inst.ResDict[fileName];
                relationPath = PathUtils.GetRelativePath("Assets", resPaths[i]);
                for (int j = 0; j < needDependenyPaths.Count; j++)
                    if (relationPath.Contains(needDependenyPaths[j]))
                        isNeedDependcy = true;
                        if (data.DependeciedNum > 1)
                            AssetImporter importer = AssetImporter.GetAtPath(relationPath);
                            importer.assetBundleName = data.Name;
                            importer.assetBundleVariant = ResourceSystemFacade.FileExtension;
                if (!isNeedDependcy)
                    AssetImporter importer = AssetImporter.GetAtPath(relationPath);
                    importer.assetBundleName = data.Name;
                    importer.assetBundleVariant = ResourceSystemFacade.FileExtension;
            else
                DebugUtils.DebugError("未包含文件" + fileName);
        DebugUtils.DebugRedInfo(outPath);
        BuildPipeline.BuildAssetBundles(outPath, BuildAssetBundleOptions.UncompressedAssetBundle, BuildTarget.StandaloneWindows64);
}<span style="white-space: normal;"> </span>

Unity3D资源管理——Unity2017 Assetbundle依赖打包相关推荐

  1. Unity AssetBundle 依赖打包以及Manifest文件的使用(六)

    下面两个物体对象依赖同一个材质球和贴图,为了减少AssetBundle包的大小我们可以把依赖的资源另外打包成一个共享的包. 依赖的资源AssetBundle包名设置为share 为打包的预制体命名: ...

  2. Unity资源管理——AssetBundle构建/打包

    1.为资源设置 assetBundleName 和 assetBundleVariant. 可以在资源的 Inspector 上手动设置,也可以通过 AssetImporter 进行设置. Asset ...

  3. Unity—AssetBundle的打包及四种加载资源方式

    AssetBundle打包:脚本放在Editor文件夹内 具体代码如下: using UnityEditor; using System.IO;public class CreateAssetBund ...

  4. combotree 可以异步加载吗_Unity AssetBundle 资源打包,加载,本地缓存方式,安卓,PC本地加载路径问题...

    AssetBundle的定义和作用: 1,AssetBundle是一个压缩包包含模型.贴图.预制体.声音.甚至整个场景,可以在游戏运行的时候被加载. 2,AssetBundle自身保存着互相的依赖关系 ...

  5. unity3d资源管理

    游戏中通常有大量资源,如网格.材质.纹理.动画.着色器程序和音乐等,游戏引擎作为做游戏的工具,自然要提供良好的资源管理,让游戏开发者用最简单的方式使用资源.游戏引擎的资源管理包括两大部分:离线资源管理 ...

  6. docker 不包含依赖 打包_Docker容器技术(概念篇)

    微信公众号:Java患者 专注Java领域技术分享 Docker介绍 Docker是基于Go语言实现的开源应用容器引擎,通过对应用组件的封装.分发.部署.运行等生命周期的管理,使的用户的应用及其运行环 ...

  7. python依赖打包

    依赖打包的好处 将代码所有的依赖打包进一个文件,当代码迁移至新的平台时仅需要一条命令便可以下载,方便又快捷, 而不用一个一个的安装依赖. 你可以选择在线打包和下载依赖,也可离线打包加载依赖,具体见下文 ...

  8. Unity3d AssetBundle依赖关系获取

    PS:本文将从"打包之前"和"打包之后"两个方面去说明如何获取依赖关系 获取AB包依赖的作用 众所周知,如果一个AB包(我们称之为C)里面的资源引用到的其他资源 ...

  9. Unity3D 中材质球(Material)打包成AB(AssetBundle)出现材质丢失问题的解决方案

    转自:https://www.cnblogs.com/hacker13a/p/7279730.html 关于Unity3D中打AB(AssetBundle)资源包,默认是不连Shader一同打包进去的 ...

最新文章

  1. 双核处理(动态规划)
  2. MacBookPro 关机花屏解决
  3. Class NPOI
  4. setjump和longjump
  5. 洛谷 P4026 [SHOI2008]循环的债务
  6. Spark精华问答 | Spark和Hadoop的架构区别解读
  7. 解决 wildfly(jboss) 启动报错:'findstr' 不是内部或外部命令
  8. Java基础学习总结(77)——Java枚举再总结
  9. python每行输出8个式子_多图+代码 | 详解Python操作Excel神器openpyxl的各种操作!
  10. numpy - np.reshape:将二维数组转变三维数组
  11. Flutter高级第2篇:JSON的序列化和反序列化、创建模型类转换Json数据
  12. oracle数据库建语句吗,Oracle建表语句是什么_数据库
  13. java方面的文献综述怎么写_java论文参考文献
  14. python 写入文件 wb_python读写文件
  15. android eclipse ddms 查看线程,android ddms中查看线程释疑
  16. CVPR 2021 论文和开源项目合集
  17. 路由器、DDNS、花生壳
  18. Linux学习之Kali制作简单的Windows的木马,创建后门
  19. 经典案例--JS购物车
  20. 枸杞的功效与食用方法

热门文章

  1. 上海尼奥计算机系统有限公司,超前想象力的圆形屏电脑诞生!“MAGNEO 尼奥放大镜 ”品牌暨新品发布...
  2. 某券商自营部量化策略岗的面试题
  3. LocalDateTime 获取当前(年/月)第一天及最后一天 及 获取当天起始时间
  4. 第六届蓝桥杯(国赛)——四阶幻方
  5. Android 仿微信朋友圈 全文,收起功能
  6. pdo fetchAll
  7. CY7C68013A EEPROM烧写
  8. 数据运营需要学习什么
  9. 跨境电商亚马逊卖家入驻亚马逊选择哪个站点开始做呢
  10. vant官网访问被拒绝