→前情提要:Unity最基本的AssetBundle打包方式。

第二种打包方式

Unity提供的BuildAssetBundles API还有一个重载形式,看下面↓↓

public static AssetBundleManifest BuildAssetBundles(string outputPath, AssetBundleBuild[] builds, BuildAssetBundleOptions assetBundleOptions, BuildTarget targetPlatform);
 

这个重载函数多了一个参数,这个参数是一个AssetBundleBuild数组,下面我们来说说AssetBundleBuild是何方妖孽↓↓

AssetBundleBuild是一个结构体,有四个属性,说明如下↓↓

assetBundleName string类型,打包后AssetBundle包的名字
assetNames string数组类型,AssetBundle包中每一个文件相对于工程目录的路径(一个AssetBundle包中可以有多个文件)
addressableNames string数组类型,相当于是assetNames的别名,必须和assetNames长度一致
assetBundleVariant string类型,设置AssetBundle变体,其实就是后缀名
 
 

一般情况下,只要设置AssetBundleBuild结构体中的assetBundleName属性和assetNames属性就可以了,如果你愿意给打在AssetBundle包中的文件重命名的话,就设置一下addressableNames属性,不想重命名的文件就给一个空字符串,这样默认就会使用assetNames了。要是还想设置自定义的后缀名,可以试试AssetBundleVariant。

有了AssetBundleBuild这样一个结构体数组做参数,这就意味着我们可以让打包的过程更简单了。不用在Inspector面板中给每一个需要打包的文件设置AssetBundle名称,我们可以直接在编辑器中鼠标点选需要打包的文件,然后一键打包。当然,这也就意味着我们不能随意的控制每个AssetBundle包的名字了,有利有弊吧。

在这里讲一讲打包的方式吧,我们可以把许多文件打进一个AssetBundle包,也可以将每个文件单独打一个AssetBundle包,具体怎么打就要看需求了。

下面是打包的代码↓↓

  1.  
    [MenuItem("AssetBundles/Buil (All)")]
  2.  
    private static void _packageBuddlesInOne() {
  3.  
    string _packagePath = UnityEditor.EditorUtility.OpenFolderPanel ("Select Package Path", "F:/", "");
  4.  
    if (_packagePath.Length <= 0 || !Directory.Exists (_packagePath))
  5.  
    return;
  6.  
    buildMap[0].assetBundleName = "myBnndle";
  7.  
    //将选中对象一起打包
  8.  
    AssertBundleAssetBundleBuild[] buildMap = new AssetBundleBuild[1];
  9.  
    GameObject[] objs = Selection.gameObjects; //获取当前选中的所有对象
  10.  
    string[] itemAssets = new string[objs.Length];
  11.  
    for (int i = 0; i < objs.Length; i++) {
  12.  
    itemAssets [i] = AssetDatabase.GetAssetPath (objs [i]); //获取对象在工程目录下的相对路径
  13.  
    }
  14.  
    buildMap [0].assetNames = itemAssets;
  15.  
    AssetBundleManifest manifest = BuildPipeline.BuildAssetBundles (_packagePath, buildMap, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
  16.  
    AssetDatabase.Refresh (); //刷新
  17.  
    if (manifest == null)
  18.  
    Debug.LogError("Package AssetBundles Faild.");
  19.  
    else
  20.  
    Debug.Log("Package AssetBundles Success.");
  21.  
    }
 
 
这样所有你选中的对象就都打进一个AssetBundle包了,建议关联或相似的文件可以这样打包。

我们也可以将每个对象都打进不同的AssetBundle包,看代码↓↓

  1.  
    [MenuItem("AssetBundle/Build (Selected)")]
  2.  
    private static void _packageBuddleSelected() {
  3.  
    string _packagePath = UnityEditor.EditorUtility.OpenFolderPanel ("Select Package Path", "F:/", "");
  4.  
    if (_packagePath.Length <= 0 || !Directory.Exists (_packagePath))
  5.  
    return;
  6.  
    AssetBundleBuild[] buildMap = new AssetBundleBuild[objs.Length];
  7.  
    GameObject[] objs = Selection.gameObjects;
  8.  
    for (int i = 0; i < objs.Length; i++) {
  9.  
    string[] itemAsset = new string[] { AssetDatabase.GetAssetPath (objs[i]) };
  10.  
    buildMap[i].assetBundleName = objs[i].name;
  11.  
    buildMap [i].assetNames = itemAsset;
  12.  
    }
  13.  
    AssetBundleManifest manifest = BuildPipeline.BuildAssetBundles (_packagePath, buildMap, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
  14.  
    AssetDatabase.Refresh ();
  15.  
    if(menifest == null)
  16.  
    Debug.LogError("Error:Package Failed");
  17.  
    else
  18.  
    Debug.Log("Package Success.");
  19.  
    }
 

按↑图操作,就可以打包选中的文件了。

更多花样,现在你可以自己创造了。今天就到这儿啦,咱们下期见~

实力封装:Unity打包AssetBundle(二)的更多相关文章

  1. 实力封装:Unity打包AssetBundle(大结局)

    →→前情提要:让用户选择要打包的文件←← 大结局:更多选择 Unity打包AssetBundle从入门到放弃系列终于要迎来大结局了[小哥哥表示实在写不动了o(╥﹏╥)o]... 经过上一次的教程,其实 ...

  2. 实力封装:Unity打包AssetBundle(一)

    说明:这是一系列循序渐进的教程,今天先介绍最简单的AssetBundle打包方式. 这是一个由在Unity中需要加载模型而引发出来的一系列坑,为了填坑花了不少时间,如果有需要在Unity中自定义菜单, ...

  3. 实力封装:Unity打包AssetBundle(番外篇)

    前情提要:第二种打包方式. 自定义AssetBundle包扩展名 在之前的教程中,我们已经多次提到过扩展名了,并且也已经说明了如何设置自定义的AssetBundle扩展名.至于为什么还要把它单独拿出来 ...

  4. 实力封装:Unity打包AssetBundle(三)

    前情提要:第二种打包方式 窗口初现 通过前面的两篇教程和一篇番外,我们已经完全实现了打包的功能.但是使用起来总是觉得有些晦涩别扭,如果不告诉别人怎么使用,对方肯定是一头雾水. What?你给我的这是啥 ...

  5. 实力封装:Unity打包AssetBundle(四)

    →→前情提要:窗口初现←← 让用户选择要打包的文件 时至今日,我们选择打包文件的方式依然是在Project面板或Hierarchy面板中用鼠标点选.现在既然有了窗口,我们自然希望可以将所有文件罗列在窗 ...

  6. Unity手游之路<十一>资源打包Assetbundle

    http://blog.csdn.net/janeky/article/details/17652021 在手游的运营过程中,更新资源是比不可少的.资源管理第一步是资源打包.传统的打包可以将所有物件制 ...

  7. Unity 5.X扩展编辑器之打包assetbundle

    5.x的assetbundle与4.x以及之前的版本有些不同,不过本质是一样的,只不过5.x打包assetbundle更为简单和人性化了,总体来说只需要三个步骤: 第一步:创建打包资源 //这里是一个 ...

  8. 【Unity】AssetBundle的使用——打包/解包

    最近参考了各位大神的资源,初步学习了Unity的资源管理模式,包括在编辑器管理(使用AssetDatabase)和在运行时管理(使用Resources和AssetBundle).在此简单总结运行时用A ...

  9. Unity打包/读取AssetBundle资源全教程

    Unity 资源AssetBundle打包 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar ...

随机推荐

  1. LeetCode--292--Nim游戏

    问题描述: 你和你的朋友,两个人一起玩 Nim游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头. 拿掉最后一块石头的人就是获胜者.你作为先手. 你们是聪明人,每一步都是最优解. 编写一个函 ...

  2. 51Nod-1441 士兵的数字游戏

    题目要求是求出a!/b!(a>=b)的结果,让其不断做除法,最多能做多少次.这个问题首先可以转化为求a!中所有质因子个数-b!中所有质因子个数.以前做过一道快速求某个阶乘对一个素数的因子个数的题 ...

  3. PHP多种序列化/反序列化的方法(serialize和unserialize函数)

    serialize和unserialize函数 这两个是序列化和反序列化PHP中数据的常用函数. <?php $a = array('a' => 'Apple' ,'b' => 'b ...

  4. Centos7 下coreseek的安装

    Coreseek介绍: Sphinx默认不支持中文索引及检索,基于Sphinx开发了Coreseek 全文检索服务器,Coreseek应该是现在用的最多的Sphinx中文全文检索,它提供了为Sphin ...

  5. linux常见基本命令

    目录 1.更改文件基本属性 2.Linux文件与目录管理 3.Linux用户和用户组管理 4.磁盘管理 5.Linux vi/vim 6.linux查看防火墙状态及开启关闭命令 1.更改文件基本属性 ...

  6. CSS3--难以想象的滤镜效果

    CSS 语法 filter: none | blur() | brightness() | contrast() | drop-shadow() | grayscale() | hue-rotate( ...

  7. 把xml转成javabean的工具类

    import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; import javax.x ...

  8. PostgreSQL导出一张表到MySQL

    1. 查看PostgreSQL表结构,数据量,是否有特殊字段值 region_il=# select count(*) from result_basic; count --------- ( row ...

  9. Linux -- 之HDFS实现自动切换HA(全新HDFS)

    Linux -- 之HDFS实现自动切换HA(全新HDFS) JDK规划 1.7及以上  https://blog.csdn.net/meiLin_Ya/article/details/8065094 ...

  10. loj 10117 简单题(cqoi 2006)

    题目来源:CQOI 2006 有一个 n 个元素的数组,每个元素初始均为 0.有 m条指令,要么让其中一段连续序列数字反转——0变 1,1 变 0(操作 1),要么询问某个元素的值(操作 2). 例如 ...