使用版本Unity4.7

一、关于依赖打包

1、当一个被打包的资源A引用了其他的资源B,并且没有被打成一个包时,要选用【BuildAssetBundleOptions.CollectDependencies 收集依赖关系】或者【BuildAssetBundleOptions.CompleteAssets 完整资源】(两者并不冲突可以全选)来进行打包,否则打包的时候unity也会发出警告:A上的组件丢失。

当选择了BuildAssetBundleOptions.CollectDependencies时,果然你没有将A依赖的资源B使用BuildPipeline.PushAssetDependencies() 和BuildPipeline.PopAssetDependencies()来进行依赖打包,那么A会把其引用的资源都打包到自己的assetbundle 中。如果引用的资源是图片、sprite或自定义的shader(内置的shader不会打包,这里的自定义shader被unity看作是一种资源,打包处理的时候也是如同资源来处理的),那么会打包到assetbundle 中。如果引用的是代码,那么会打包一个对工程中代码的引用,也就是说引用的代码必须存在于工程中,这样当c被加载到本地的时候才可以和本地的代码进行关联,如果本地没有这个代码,则会丢失对这个脚本的引用。如图所示可以看到打包的资源(图片和NGUI中自带的shader)和脚本代码的引用:

当只选择BuildAssetBundleOptions.CompleteAssets进行打包的时候,则不会将A引用的资源打包进来,通过调试也可以查看到包比使用CollectDependencies的小很多,断点后也发现不包括依赖的资源。我的理解是等于我们告诉了unity我已经把所有资源放进资源包了,所以它也不会报错。据官方文档说在打包模型和动画的时候这个选择会起作用,还需要进一步的实践验证(验证结果是使用CompleteAssets时,会把模型的所有动画剪辑打包进去,包括在animationController中没有使用到的)。如果只是用CompleteAssets而不使用CollectDependencies打包,那么由于资源包中不带引用的信息,即使是引用的脚本(或资源)在本地工程存在,也会在assetbundle 被加载下来后丢失掉对脚本(或资源)的引用。

二、关于依赖资源链式查找的机制猜想

三、关于Unload

四、关于B(依赖A)重新打包,A是否要重新打包。即依赖资源更新,被依赖的资源是否需要重新打包的问题

五、关于GraphicsSettings和shader的打包

1、如果单独打包一个资源c,c引用了一个NGUI自定义shader Unlit/Transparent Colored,选择了BuildAssetBundleOptions.CollectDependencies,那么这个shader会打包到这个资源包中

2、如果不选择BuildAssetBundleOptions.CollectDependencies,那么shader则不会打包。那么这个资源包在加载到本地的时候是否会自动关联到本地的shader呢?这个要分为两种情况讨论。

第一种,就是如图 5.1,将shader Unlit/Transparent Colored加入到GraphicsSettings中,这样设置之后再打包,即使没有选择BuildAssetBundleOptions.CollectDependencies,当资源包加载到本地的时候也可以自动关联这个shader。(需要保证shader会被打包到安装包,要放在 Resource文件夹下

                  图 5.1

第二种,就是如图 5.2,没有在GraphicsSettings中设置这个shader,然后打包,那么资源包加载到本地的时候是不能自动关联这个shader的,结果如图 5.3。

                图 5.2

                图 5.3

3、如果选择BuildAssetBundleOptions.CollectDependencies,包shader打包成基础包,c去依赖这个shader基础包又分为两种情况

3.1 c用到的shader都在shader基础包中,那么一切正常。

3.2 c用到的shader一部分在shader包中,那么这一部分正常,不在基础中的shader c并不会打包到自己身上,而回在在被加载回来后在本地寻找GraphicsSettings列表,找不到测丢失shader。(但是内置shader是可以自动关联)

六、关于循环打包

在做打包工具的时候我们要对多个预设已经依赖打包。

比如打包BCDEF,他们都依赖A

你以为可以这样写:

push

build A

push

for BCDEF列表

build

pop

pop

然后你发现脚本各种丢失。。。

实际上应该这样:

push

build A

push

for BCDEF列表

push

build 

pop

pop

pop

这层push pop一定要写,表示BCDEF是不互相依赖的并列关系~

七、关于AssetBundle.CreateFromFile

文档如下:

AssetBundle.CreateFromFile

 
public static AssetBundleCreateFromFile(string path);

Parameters

path Path of the file on disk

See Also: WWW.assetBundleWWW.LoadFromCacheOrDownload.

Description

Loads an asset bundle from a disk.

Only uncompressed(只支持不压缩的,打包的使用需要选择uncompressed,默认是压缩的) asset bundles are supported by this function. This is the fastest way to load an asset bundle

还有一个非常肯定的地方,用这儿方法加载的assetbundle不能有重名的,即使路径不一样,不然会报错,提示已经加载过相同的包!

(Unity4.7)assetbundle 坑爹总结的更多相关文章

  1. Unity3D AssetBundle相关

    Unity3D AssetBundle相关 首先,先看一下原理吧  Unity3D研究院之Assetbundle的原理(六十一) 其次,接着往下看:Unity3D研究院之Assetbundle的实战( ...

  2. Unity AssetBundle爬坑手记

    这篇文章从AssetBundle的打包,使用,管理以及内存占用各个方面进行了比较全面的分析,对AssetBundle使用过程中的一些坑进行填补指引以及喷!   AssetBundle是Unity推荐的 ...

  3. (转)Unity AssetBundle爬坑手记

    转自:http://www.cnblogs.com/ybgame/p/3973177.html 这篇文章从AssetBundle的打包,使用,管理以及内存占用各个方面进行了比较全面的分析,对Asset ...

  4. GJM: Unity3D AssetBundle 手记 [转载]

    这篇文章从AssetBundle的打包,使用,管理以及内存占用各个方面进行了比较全面的分析,对AssetBundle使用过程中的一些坑进行填补指引以及喷!   AssetBundle是Unity推荐的 ...

  5. 【Unity游戏开发】AssetBundle杂记--AssetBundle的二三事

    一.简介 马三在公司大部分时间做的都是游戏业务逻辑和编辑器工具等相关工作,因此对Unity AssetBundle这块的知识点并不是很熟悉,自己也是有打算想了解并熟悉一下AssetBundle,掌握一 ...

  6. AssetBundle使用心得【资源加载】

    0.资源加载方式 静态资源 Asset下所有资源称为静态资源 Resources资源 Resources目录下,通过实例化得到的资源 AssetBundle资源 又称为增量更新资源 1.什么是Asse ...

  7. Unity AssetBundle

    Unity AssetBundle爬坑手记 - 夜阑卧听风吹雨 时间 2014-09-15 16:55:00  博客园精华区原文  http://www.cnblogs.com/ybgame/p/39 ...

  8. Unity资源Assetbundle

    转  Unity资源打包之Assetbundle 本文原创版权归 csdn janeky 所有,转载请详细注明原创作者及出处,以示尊重! 作者:janeky 原文:http://blog.csdn.n ...

  9. Unity资源打包之Assetbundle

    转  Unity资源打包之Assetbundle 本文原创版权归 csdn janeky 所有,转载请详细注明原创作者及出处,以示尊重! 作者:janeky 原文:http://blog.csdn.n ...

随机推荐

  1. JavaBean转xml

    JavaBean转xml的工具就是:XStream XStream的作用: XStream可以把JavaBean对象转换成XML!通常服务器向客户端响应的数据都是来自数据库的一组对象,当我们不能直接把 ...

  2. hive使用map字段

    create table role_bigtable(table_name string, record_date string, server_id string, map_col map<s ...

  3. TessorFlow学习 之 手写数字识别的搭建

    手写数字识别的搭建

  4. Java中同步的几种实现方式

    1.使用synchronized关键字修饰类或者代码块: 2.使用Volatile关键字修饰变量: 3.在类中加入重入锁. 代码示例: 非同步状态下: public static void main( ...

  5. LeetCode 4. Median of Two Sorted Arrays & 归并排序

    Median of Two Sorted Arrays 搜索时间复杂度的时候,看到归并排序比较适合这个题目.中位数直接取即可,所以重点是排序. 再来看看治阶段,我们需要将两个已经有序的子序列合并成一个 ...

  6. JDK-1.8-CopyOnWriteSet

    CopyOnWriteSet 看了下CopyOnWriteSet源码,底层使用的是CopyOnWriteList,根据底层的实现,每次读取都是N的复杂度.每次写也是N的复杂度.有个代码可以看一下, 来 ...

  7. Heap Dump (heap=dump)

    Heap Dump (heap=dump) 转储堆内容使用heap=dump选项.可以是ASCII或者是二进制格式,根据设定的格式,jhat解析二进制格式.format=b. 如果指定格式是二进制,转 ...

  8. 学习笔记:Vue

    https://cn.vuejs.org/v2/api/ 官网API https://cn.vuejs.org/v2/guide/ 官网教程 http://www.runoob.com/vue2/vu ...

  9. 深度学习原理与框架-神经网络-cifar10分类(代码) 1.np.concatenate(进行数据串接) 2.np.hstack(将数据横着排列) 3.hasattr(判断.py文件的函数是否存在) 4.reshape(维度重构) 5.tanspose(维度位置变化) 6.pickle.load(f文件读入) 7.np.argmax(获得最大值索引) 8.np.maximum(阈值比较)

    横1. np.concatenate(list, axis=0) 将数据进行串接,这里主要是可以将列表进行x轴获得y轴的串接 参数说明:list表示需要串接的列表,axis=0,表示从上到下进行串接 ...

  10. cx_Oracle.DatabaseError: DPI-1047

    ODPI-C Installation¶ Overview Oracle Client and Database Versions Linux Oracle Instant Client Zip Or ...