使用版本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. python各种推导式

    字典推导式 例一:将一个字典的key和value对调 mcase = {, } mcase_frequency = {mcase[k]: k for k in mcase} print(mcase_f ...

  2. main.js_vue

    下载依赖包:cnpm install 或者cnpm i 启动项目:npm run dev vue如何加载main.js 如果你是用vue.js官网提供的脚手架工具并沿用默认配置的话,你执行npm ru ...

  3. MySQL-MMM实现MySQL高可用

    一.MMM简介 MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序.MMM使用Perl语言开发,主要用来监控 ...

  4. 「一本通 6.4 例 4」曹冲养猪(CRT)

    复习一下 扩展中国剩余定理 首先考虑两个同余方程 \[ x \equiv a_1\; mod\; m_1\\ x \equiv a_2\; mod\; m_2 \] 化成另一个形式 \[ x = n_ ...

  5. redis中key过期事件

    刚到新公司一个月左右,有个新需求,想做定时任务,比如在用户注册时间的3天后推送用户一条消息. 从刚开始脑子里面闪现的数据库轮询,立马否定掉(浪费资源),再到linux系统的定时任务,但是当用户量过大时 ...

  6. JMeter性能(压力)测试--使用解锁

    1. 首先去官网下载JMeter:  http://jmeter.apache.org/download_jmeter.cgi 2. 解压缩后到目录 \apache-jmeter-5.0\bin 下找 ...

  7. phpmyadmin无登录表单无法登陆

    发现我的博客的phpmyadmin登录过一次成功之后,后面在登录没有登录表单了,查了很多原因,下面的方法亲测可以解决 打开 phpMyAdmin\libraries\plugins\auth\Auth ...

  8. 关于Access导入Oracle会产生双引号的问题

    把Access2007的数据导入到oracle 10g xe中,成功了,可是在写sql语句时必须加双引号 ,如select “name” from “Product”,貌似是因为access为了防止列 ...

  9. java se 随机数。生成

    public class test { public static void main(String[] args) { getRandomNum1(); getRandomNum2(); getRa ...

  10. vmware三种网络模式:桥接模式|仅主机|NAT模式

    VMware 网络模式 1. Bridged(桥接)桥接模式下,宿主机物理网卡(主机网卡)和虚拟网卡通过 VMnet0 虚拟交换机进行桥接,物理网卡和虚拟网卡在拓扑图上处于同等地位,物理网卡和虚拟网卡 ...