Unity5-ABSystem(一):AssetBundle原理
来源:互联网 发布:三峡大学网络教育 编辑:程序博客网 时间:2024/06/13 22:21
- 说明
- AssetBundle简介
- AssetBundle内部格式
- normal bundle
- scene bundle
- 压缩
- AssetBundle内部格式
说明
本系列所使用unity版本为5.3.4f1。
AssetBundle简介
AssetBundle即资源包,是Unity Pro提供和推荐的资源打包方式,它可以把多个自定义的游戏对象或者资源以二进制形式保存到Assetbundle文件中。Assetbundle支持所有unity可识别的格式:模型、贴图、音频、整个场景等,其中最为方便的是可以将关联的内容制作成一个prefab,例如一个模型的贴图、动作和模型等,然后将整个prefab导出到AssetBundle,Unity会自己收集该Prefab使用到的关联文件,将其一并打入AssetBundle文件,并保留prefab中资源和脚本之间相互关联。
AssetBundle内部格式
以下图来自官网,黑体为翻译。
一个AssetBundle本质上是将一些对象组合成一个序列化文件,根据是普通包(normal bundle)还是场景包(scene bundle),Assetbundle的数据文件展开略有不同。
normal bundle
普通包由本身信息(Assetbundle)、各个对象和音频文件组成。
scene bundle
场景包还包含了预加载数据(PreloadData)、共享数据(shaderData)和全局光照数据(Global Illumination Data)。
压缩
AssetBundle可以选择是否压缩,Unity5.3之前只能使用LZMA压缩,Unity5.3之后支持选择LZ4压缩。
官网意译:图中压缩部分表示可有块压缩(chunk-based)、流压缩(stream-based)两种方式。流压缩(LZMA)在处理整个数据块时使用同一个字典,它提供了最大可能的压缩率但只支持顺序读取。块压缩(LZ4)指的是原始数据被分成大小相同的子块并单独压缩。如果你想要实时解压/随机读取开销小,则应该使用这种。
释义:LZMA压缩方式的优点在于使用同一个字典压缩率较高,但只能顺序读取意味着加载任意一个资源时,都需要将整个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原理
- Unity5-ABSystem(一):AssetBundle原理
- Unity5-ABSystem(二):AssetBundle导出
- Unity5-ABSystem(三):AssetBundle加载
- Unity5-ABSystem(四):AssetBundle依赖
- Unity5-ABSystem(五):AssetBundle内存
- Unity5-ABSystem(二):AssetBundle导出
- Unity5-ABSystem(三):AssetBundle加载
- Unity5-ABSystem(四):AssetBundle依赖
- Unity5-ABSystem(五):AssetBundle内存
- unity5.X AssetBundle使用(一 )
- Unity5的AssetBundle(一、打包)
- unity5.X AssetBundle资源打包(一 )
- Unity5 AssetBundle
- unity5.X 初步学习 AssetBundle(一) 打包1
- unity5 assetbundle参考
- Unity5 AssetBundle管理
- Unity5.0 AssetBundle 实验
- C# 刷新win7桌面
- Java线程经典面试题
- bnuoj_4049 四叉树
- SPOJ 375 树链剖分
- C语言link()函数:建立文件连接
- Unity5-ABSystem(一):AssetBundle原理
- Android清除本地数据缓存代码案例
- linux中的Make使用模板
- SOAPUI使用教程-REST请求工作
- poj 2392背包条件限制
- MPLS-2 LDP邻居的建立
- js arguments.caller arguments.callee分析
- RelativeLayout
- diy数据库(十一)--diydb的运行时模块