使用版本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. 升级Android Studio到1.0.2的问题解决

    当前从光网下载到的Android Studio的版本是1.0.1,升级到1.0.2大概是3M的升级包.升级很简单,点击Help--Check For Update... 可是我碰到的情况是提示:Con ...

  2. django-response对象

    HttpResponse 对象则需要 web 开发者自己创建,一般在视图函数中 return 回去.下面我们就来看看 HttpResponse 对象的各种细节 首先,这个对象由 HttpRespons ...

  3. 流(Stream)与文件流(FileStream)

    //通过流的方式添加 StreamWriter writer = new StreamWriter(@"C:\A\ca.txt", true, Encoding.Default); ...

  4. vue2.0过滤器

    最近一阶段,项目上比较清闲,有了更多的时间可以研究一下vue了. 这里记录一下关于vue2.0过滤器的学习. vue2.0删除了所有的框架自带的过滤器,也就是说,如果你在vue2.0当中想用过滤器,那 ...

  5. 【Linux】使用ZStack私有云创建本地Linux服务器

    1.运维配置了一台Linux的主机,然后安装了ZStack,前面这部分操作运维处理了. 2.首先打开Zstack的网址地址,一般是一个IP地址(此时不写) 3.然后进入页面后,默认进入首页,此时可以按 ...

  6. CMD命令行合并多个txt文件到一个txt文件

    运行->输入CMD回车 输入: Copy G:\MyFolder\*.txt  G:\NewFolder\a.txt 回车即可 意思是将G:\MyFolder\下的所有txt文本内容复制到G:\ ...

  7. <spark> hadoop/spark 集群搭建

    参考的这3个文档,虽然搭建花了挺长时间也遇到挺多问题,但是这3个文档对我的帮助确实挺大,如果有兴趣的或者有需要的可以参考以下文档. http://blog.csdn.net/wy250229163/a ...

  8. 8.Appium的基本使用-3(安装JDK、android-sdk)

    1.下载安装JDK :https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html安装教程参 ...

  9. js: 字符集

    用js生成字符集 一般网页制作中需要一些向上向下的小箭头,用图片非常不合算(一个页面发起多个http请求.css.文件大小等方面考虑) 所以用一些字符集的字符图形,效果很好 下面是用js生成字符集,以 ...

  10. ubuntu 14.04 安装 Apache Thrift 0.10

    1.到官网下载源码压缩文件 https://thrift.apache.org/download 2.安装依赖软件,可以参考 https://thrift.apache.org/docs/instal ...