开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

教程分享

关注:636

当前位置:游戏蛮牛 技术专区 教程分享

查看: 646|回复: 2

[自学总结] 关于unity5.x资源打包,一起研究下

[复制链接]  [移动端链接]
2初来乍到
139/150
排名
10220
昨日变化
4

2

主题

45

帖子

139

积分

Rank: 2Rank: 2

UID
32238
好友
1
蛮牛币
181
威望
0
注册时间
2014-7-3
在线时间
28 小时
最后登录
2017-1-19
QQ
发表于 2016-12-31 01:45:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
本帖最后由 龙雨山 于 2016-12-31 02:28 编辑

相信很多大神,都发过这个unity5.x的AB打包了,小弟总结了一下,稍微改 了一点,和大家分享一下。还有一些问题,希望可以交流下,第一次发帖,有问题请谅解

代码如下:
[MenuItem("Assets/Build AssetsBundle From Selection")]
    static void ExportResource()
    {
        List<string> filePathList = new List<string>();
        // 选择的要保存的对象  
        Object[] selection = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);
        string path = PathManage.GetInstance().AssetBundlePath;
        //如果路径不存在,创建路径
        DirectoryInfo dt = new DirectoryInfo(path);
        if (!dt.Exists)
        {
            Directory.CreateDirectory(path);
        }
        //添加路径及资源相关列表
        for (int i = 0; i < selection.Length; i++)
        {
            Object obj = selection;
            string filePath = AssetDatabase.GetAssetOrScenePath(obj);
            AddDependencies(filePath, filePathList);
        }

        //资源归类
        Dictionary<string, List<string>> list_dict = new Dictionary<string, List<string>>();

        for (int i = 0; i < filePathList.Count; i++)
        {
            string f_path = filePathList;
            if (string.IsNullOrEmpty(f_path))
            {
                continue;  
            }                       
           //获取路径文件的后缀名,去掉 点
            string endText = Path.GetExtension(f_path).Trim('.');  
            if(!list_dict.ContainsKey(endText))
            {
                list_dict[endText]=new List<string>();
            }
            List<string> list = list_dict[endText];
            list.Add(f_path);
        }

        //添加打包的资源
        AssetBundleBuild[] abb_array = new AssetBundleBuild[list_dict.Count];
        List<string> key_list = new  List<string>(list_dict.Keys);
        for (int i = 0; i < key_list.Count; i++)
        {
            string key = key_list;
            if (string.IsNullOrEmpty(key) || !list_dict.ContainsKey(key) || list_dict[key]==null)
            {
                continue;
            }
            List<string> list = list_dict[key];
            abb_array.assetNames = list.ToArray();
            abb_array.assetBundleName = string.Format("assetBundle{0}", key).ToLower();
        }
        BuildPipeline.BuildAssetBundles(path, abb_array, BuildAssetBundleOptions.CollectDependencies, BuildTarget.StandaloneWindows);
        AssetDatabase.Refresh();
    }
    //循环添加路劲及资源相关列表
    static void AddDependencies(string path,List<string> list)
    {
        if (list.Contains(path))
        {
            return;
        }
        list.Add(path);
        string[] fileDependencies = AssetDatabase.GetDependencies(path);
        for (int i = 0; i < fileDependencies.Length; i++)
        {
            string fd = fileDependencies;
            if (string.IsNullOrEmpty(fd))
            {
                continue;
            }
            AddDependencies(fd, list);
        }
    }



这是通过字典方式,文件后缀作为KEY,保存需要打包的信息。网上看过一些,都是写死打包类型,应该是为了教学让人更容易理解吧。这样修改之后,不需要去固定几个类型打包了,有几个打几个,但是小弟这里实验了下,发现了个问题,就是AB打包有个很恶心的地方,打包出来会有个总的依赖文件,打包一次就会被覆盖,所以不得不全部再次打包。如果可以理想一点,持续增加,那就非常好了,如果有大神实现了,请告知小弟啊。




回复

使用道具 举报

3偶尔光临
229/300
排名
8716
昨日变化
6

1

主题

111

帖子

229

积分

Rank: 3Rank: 3Rank: 3

UID
195727
好友
0
蛮牛币
481
威望
0
注册时间
2016-12-23
在线时间
33 小时
最后登录
2017-6-18
发表于 2017-1-1 16:32:18 | 显示全部楼层
66666666666666666666666

回复 支持 反对

使用道具 举报

4四处流浪
344/500
排名
4751
昨日变化
5

0

主题

59

帖子

344

积分

Rank: 4

UID
188477
好友
0
蛮牛币
632
威望
0
注册时间
2016-12-1
在线时间
77 小时
最后登录
2017-6-13
发表于 2017-1-9 11:38:30 | 显示全部楼层
看看看看看看看看看看看看

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表