转载自:http://blog.csdn.net/lodypig/article/details/51863683

说明

本系列所使用unity版本为5.3.4f1。


AssetBundle简介

  AssetBundle是Unity Pro提供和推荐的资源导出方式,它可以把多个自定义的游戏对象或者资源以二进制形式保存到Assetbundle文件中。Assetbundle支持所有unity可识别的格式:模型、贴图、音频、整个场景等,其中最为方便的是可以将关联的内容制作成一个prefab,例如一个模型的贴图、动作和模型等,然后将整个prefab导出到AssetBundle,即可保留prefab中资源和脚本之间相互关联。


AssetBundle内部格式

  • 以下图来自官网,黑体为翻译。

      一个AssetBundle本质上是将一些对象组合成一个序列化文件,根据是普通bundle(normal bundle)还是场景bundle(scene bundle),Assetbundle可以展开成略有不同的数据文件。

normal bundle

 

scene bundle

 

 后面会详细讲到其内部格式,现在可以看到,普通的AssetBundle包含了本身信息(Assetbundle)、各个对象和音频文件,而场景Assetbundle还包含了预加载数据(PreloadData)、shaderData和全局光照数据(Global Illumination Data)。


压缩

  
  AssetBundle可以选择是否压缩,Unity5.3之前只能使用LZMA压缩,Unity5.3之后支持选择LZ4压缩。 
  图中压缩部分显示了可能有块压缩(chunk-based)和流压缩(stream-based)两种方式。块压缩(LZ4)指的是原始数据被分成大小相同的子块并单独压缩。如果你想要实时解压/随机读取开销小,则应该使用这种。而流压缩(LZMA)在处理整个数据块时使用同一个字典,它提供了最大可能的压缩率但只支持顺序读取。 

  LZMA压缩方式的优点在于AssetBundle压缩率较高,但只能顺序读取意味着加载任意一个资源时,都需要将整个AssetBundle解压,造成卡顿和额外内存占用。LZ4压缩率较低(测试LZMA换LZ4:86.9M -> 108M),但不需要全部解压即可读取,不会有大的卡顿和额外内存占用。后面会详细对比两种压缩方式。


AssetBundle内部格式

这里有一篇Unity3D asset bundle 格式简析,分析了unity3.5下Assetbundle的内部格式,总结下来结构如下:

  • AssetBundleFileHead : 记录了版本、是否压缩等主要描述信息。
  • AssetFileHeader :包含一个文件列表,记录了每个资源的name,offset,length等。
  • Asset1 : 第一个资源本身,内部结构如下 
    • AssetHeader :包含了TypeTree大小、文件大小、format等。
    • TypeTree(可选):记录了asset 对象的class id,在 Unity3d 的官方文档 可以查到每个id的对象。
    • ObjectPath :主要记录了一个pathID(资源唯一索引id)。
    • AssetRef:记录了AssetBundle对外部资源的引用情况。
  • Asset2 :第二个资源,结构跟上面一样
  • ……> : 更多资源

  大致符合官网上normal bundle的内容,看来Unity在方面变动不大,文中也提到了分析方式是阅读disunity源码,而disunity也已经支持了unity5,有兴趣也可以分析unity5中Assetbundle的内部结构。

 

Unity5-ABSystem(一):AssetBundle原理的更多相关文章

  1. Unity5.x版本AssetBundle加载研究

    之前说了 “Unity5.x版本AssetBundle打包研究”,没看过的请先看一下:http://www.shihuanjue.com/?p=57 再来看本文,有一定的连接性. 先梳理一下思路: 要 ...

  2. Unity5.X 新版AssetBundle打包控制

    一.什么是AssetBundle 估计很多人只知道Unity的模型之类的东西可以导出成一种叫做AssetBundle的文件,然后打包后可以在Unity程序运行的时候再加载出来用.那么AssetBund ...

  3. Unity5.x版本AssetBundle打包研究

    Unity5的AssetBundle打包机制和以前版本不太一样.简单的说就是,只要给你要打包的资源设置一个AssetBundleName ,Unity自身会对这些设置了名字的资源进行打包,如果一个资源 ...

  4. Unity5版本的AssetBundle打包方案之打包Scene场景

    using UnityEngine; using System.Collections; using UnityEditor; /// <summary> /// 脚本位置:Editor文 ...

  5. Unity5系列资源管理AssetBundle——更新实现

    前面我们研究了AssetBundle的打包与加载,现在我们来了解下如何在项目中根据版本号更新内容. 最最重要的一点,细心的朋友应该看到了在加载AssetBundle的MrcAssetManager类中 ...

  6. Unity5系列资源管理AssetBundle——加载

    上次我们进行了AssetBundle打包,现在我们还把打包的资源加载到我们的游戏中.在加载之前,我们需要把打包好的Bundle包裹放到服务器上,如果没有,也可以使用XAMPP搭建本地服务器. 加载的A ...

  7. Unity5系列资源管理AssetBundle——打包

    资源管理是游戏开发的重要环节,Unity中使用AssetBundle可以非常方便地帮我们打包和更新游戏内容,在5系列中,AssetBundle更是方便好用,现在让我们先进行打包吧. 刚说了,5系列打包 ...

  8. Unity5.X 新版AssetBundle使用方案及策略

    1.概览 Unity3D 5.0版本之后的AssetBundle机制和之前的4.x版本已经发生了很大的变化,一些曾经常用的流程已经不再使用,甚至一些老的API已经被新的API所取代. 因此,本文的主要 ...

  9. Unity5.4新版AssetBundle资源打包

    (1)新版本 唯一打包API Buildpipeline.BuildAssetBundle (2)在资源的Inpector界面最下方可设置该资源的assetbundleName, 每个assetbun ...

随机推荐

  1. Python邮件发送功能

    import smtplibfrom email.mime.text import MIMEText_user = "1147016115@qq.com"#发件人_pwd = &q ...

  2. Python爬虫(一):爬虫伪装

    1 简介 对于一些有一定规模或盈利性质比较强的网站,几乎都会做一些防爬措施,防爬措施一般来说有两种:一种是做身份验证,直接把虫子挡在了门口,另一种是在网站设置各种反爬机制,让虫子知难而返. 2 伪装策 ...

  3. CentOS系统查看软件安装路径

    Linux系统一般都是命令行界面,对于安装的软件也是通过命令安装的.对于软件包更新和卸载等有时候需要查看检查是否有改软件,软件安装存储的路径对于修改配置文件等是必要的.那么怎么查看软件安装路径呢?小编 ...

  4. 让视频丝滑流畅——N/A通用补帧傻瓜解决方案

    补帧就是字面意思,把24帧的视频通过算法即时补偿到更高的帧数,获得更优秀的观感体验 索尼大法brivia电视的中高端产品线中的motionflow技术,都可以实现硬件补帧,只需要把动态打开,相应的画面 ...

  5. kotlin系列文章 --- 1.初识kotlin

    简介 Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由Jetbrains设计开发,现在是Android官方开发语言,和Java具有互操作性,可以共存. 为什么选择kotlin? 简 ...

  6. axios对put操作对Android的支持之坑

    ### 前段时间我做的一个手机端H5项目,需要发送一个put请求.因为ajax现在用的人有点少了,而且公司里边都是用的axios,所以我也是用的是axios做的请求. ### 再开发的时候测试都没有问 ...

  7. Kafka常用运维操作

    创建主题kafka-topics.sh --zookeeper localhost:2181 --create --topic my-topic --replication-factor 3 --pa ...

  8. windows服务器多端口Redis安装步骤

    1.从官网获取最新稳定版redis文件.按端口号复制多个文件,比如6379和6380端口的文件包, 修改各自Conf文件的port号,分别为6379和6380.然后重命名为redis6379.conf ...

  9. Chrome插件开发(一)

    作为一个开发人员,我们在日常工作中肯定会用到 Chrome 浏览器,同时也会用到谷歌的一些插件,比如 Tampermonkey,AdBlock等,在之前的文章本人还是用了 Tampermonkey,传 ...

  10. 利用pyecharts将数据可视化

    可视化展示在数据分析领域中是一个至关重要的点,好的可视化展示对我们的结果分析有更好的支持作用. 一.问题 在数据分析的时代里面我们需要将数据的可视化展现出来,更加方便用户的观察.如下图 有些时候我们需 ...