使用版本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. delphi2010 域名转换IP

    uses winsock; function GetHostIp_wwwdelphitopcom(HostName: string): string; type   tAddr = array[0.. ...

  2. 聊天对话框(ctrl+enter发送)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  3. 性能测试day01_性能基本概念

    其实第一次接触性能是15年的时候,懵懵懂懂的被领导拉去做第一次做性能压测,如今有机会重新听一下云层大大讲解性能,于是打算以此博客记录下整个学习的过程,如若有不同意见者可以在下面留言指出,也欢迎大家一起 ...

  4. Jscraft 使用 Shell 与预先加载别名混合使用

    Session session = a.getSessionShell("user", "pwd", "host"); Channel ch ...

  5. ROS-by-example的安装

    在这里我之前用的VM12安装成功之后,仿真器机器人会有问题,故把电脑做成双系统的形式来重新安装: 环境:Ubuntu14.04 LTS 32bits ROS版本:ROS Indigo 在学习本部分之后 ...

  6. <转载> MySQL 架构 http://www.cnblogs.com/winner-0715/p/6863802.html

    1.MySQL整体逻辑架构 我们先下图看看MySQL整体逻辑架构(MySQL’s Logical Architecture) 图1 第一层,即最上一层,所包含的服务并不是MySQL所独有的技术.它们都 ...

  7. java 可重入锁ReentrantLock的介绍

    一个小例子帮助理解(我们常用的synchronized也是可重入锁) 话说从前有一个村子,在这个村子中有一口水井,家家户户都需要到这口井里打水喝.由于井水有限,大家只能依次打水.为了实现家家有水喝,户 ...

  8. 1. 在config.ini文件中加入dm.park.time=1,会使uap中的tomcat启动加快

    在config.ini文件中加入dm.park.time=1,会使uap中的tomcat启动加快

  9. 比较sql server两个数据库

    比较sql server两个数据库 http://opendbdiff.codeplex.com/ http://www.red-gate.com/ 有SQL Compare和SQL Prompt 开 ...

  10. 字符串md5之后转成int类型, 方便数据库索引

    function hashStringToInt($string){ $stringHash = substr(md5($string), 0, 8); return base_convert($st ...