Unity AssetBundle介绍

Unity AssetBundle介绍1.什么是AssetBundle?AssetBundle是一种资源压缩包。资源打包AssetBundle有两个好处:减小安装包的大小,资源可以在进入游戏时候,网络下载。 热更资源,方便修复线上资源问题引起的Bug,或新增加游戏内容。AssetBundle分为两种类型:场景AssetBundle&非场景AssetBundle。2.AssetBundle结构2.1As…

大家好,又见面了,我是你们的朋友全栈君。

1.什么是AssetBundle?

AssetBundle是一种资源压缩包。资源打包AssetBundle有两个好处:

  1. 减小安装包的大小,资源可以在进入游戏时候,网络下载。
  2. 热更资源,方便修复线上资源问题引起的Bug,或新增加游戏内容。

AssetBundle分为两种类型:场景AssetBundle & 非场景AssetBundle。

2.AssetBundle结构

2.1 AssetBundle由两部分组成:Header和Data。

  1. 头部包含AssetBundle资源的信息( 版本号,文件信息,数据类型,压缩类型)等,文件信息记录了数据部分里边每个资源的文件名以及每个资源在整个AssetBundle文件中的offset和size,通过这个信息可以直接获取AssetBundle中某个资源的数据。从Unity5.3开始这部分数据会单独生成一个跟AssetBundle同名的.mainfest文件。
  2. 数据段包含打包到AssetBundle中的资源(模型,贴图,Shader,预制体,声音,场景)等。

非场景AssetBundle结构:

Unity AssetBundle介绍

场景AssetBundle结构:(PreloadData,AssetBundle应该是在Shared data中,更多的Objects在SerializedFile中)

 Unity AssetBundle介绍

全局光照数据(Global Illumination Data)

SerializedFile中记录着重建资源所需的信息。

Profiler中SerializedFile的大体组成如下:

  • 14KB File Read Cache
  • (较大)TypeTree,用于兼容老版本打包的AssetBundle在新版本中使用。BuildAssetBundleOptions.DisableWriteTypeTree可关闭兼容,减小内存占用。
  • 一个AssetBundle有外部引用,自动分配一个72KB的内存。
  • (较小,与AB内的Object数量相关)Object map & infos
  • 2017.4.8以后(一个AssetBundle有外部引用,自动分配一个4KB的内存。)

2.2 经过压缩后的AssetBundle:

采用压缩(LZMA,LZ4)的AssetBundle数据段的格式:Unity AssetBundle介绍

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


Unity安装包中有两个工具,可反编译已打包的AssetBundle

1.WebExtrct

Unity AssetBundle介绍

可查看AssetBundle信息,如上图,可查看AssetBundle版本,大小。同时得到一个16进度文本。 

Unity AssetBundle介绍

2.binary2text 进一步处理上一步的16进度文本。

Unity AssetBundle介绍

Unity AssetBundle介绍

size = AssetBundle中某个资源的大小

Unity AssetBundle介绍

1. External References = 有其他AssetBundle引用,列在此处。

2. m_Container = AssetBundle文件中的所有资源。

  • m_FileID = External References中依赖的ID。例如m_FileID = 1,对应External Referencespath(1):xxxxxxxx。xxxx就是被依赖的资源。对应如果m_FileID = 0;说明没有依赖其他AssetBundle。
  • m_PathID = 某个资源在AssetBundle中的唯一Id

3. 加载某个资源,需要依赖的资源在m_PreloadTable中查找

  • preloadIndex = m_PreloadTable中的index。
  • preloadSize = m_PreloadTable中的index开始到+index+preloadSize的资源。

PS:LoadAsset 传入string,去m_Container中,然后Preload中查找依赖的的资源。组成需要的资源,返回需要的资源。

  • AssetId = m_FileID + m_PathID 
  • InstanceId 每次实例化对象,ID高位加2,因此不唯一
  • MonoScript 有一个GUID 关联DLL里边的Class

AssetBundle构建出现差异,但是上边的16进度文本一致。float精度不够造成的。可用-hexfloat对比前后两个版本的Assetbundle。Unity AssetBundle介绍

参考:

https://docs.unity3d.com/Manual/ClassIDReference.html

https://www.cnblogs.com/pinkfloyd/p/6489979.html

https://blog.csdn.net/qq_35361471/article/details/82854560

https://www.youtube.com/watch?v=mMjcDjM8Fm8

https://blog.csdn.net/lodypig/article/details/51863683

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150286.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 分布式爬虫部署[通俗易懂]

    分布式爬虫部署[通俗易懂]【服务器端】1.下载redis,RedisDesktopManagerredis。2.修改配置文件(找到redis下的redis.windows.conf双击打开,找到bind并修改为0.0.0.0,然后protected-mode“no”3.打开cmd命令行进入redis的安装目录,输入redis-server.exeredis.windows.conf回车,保持程序一直开着。如果不是这个界面,证明redis服务已经开启了,需要redis-clishutdow

    2022年10月26日
    0
  • 什么叫侧面指纹识别_侧面指纹VS屏幕指纹,谁才是更快的识别方式?[通俗易懂]

    什么叫侧面指纹识别_侧面指纹VS屏幕指纹,谁才是更快的识别方式?[通俗易懂][PConline专业评测]随着全面屏设计普遍化,为了提高屏占比和整机的一体性,前置和后置的物理指纹按键已经慢慢淡出了我们的视线。目前最流行的方式莫过于屏幕指纹技术,由于采用此方法能实现更高的屏占比、更完整的背部外观。但也牺牲了解锁速度、识别率,无法享受以往电容式指纹解锁更快的触感。2018年5月51日晚,荣耀在伦敦正式发布了荣耀20系列年度旗舰手机。荣耀20PRO搭载了6.26英寸魅眼全视屏…

    2022年6月29日
    71
  • 超干货!!!零基础过Python计算机二级,考级必备!!!

    超干货!!!零基础过Python计算机二级,考级必备!!!大学加分技能,Python计算机二级!!!

    2022年10月12日
    0
  • 手机发布版sha1怎么获取_android获取真实时间

    手机发布版sha1怎么获取_android获取真实时间Android安卓获取发布版SHA1生成打包密钥后打开黑窗口,进入打包密钥同级目录输入命令:keytool-list-v-keystore密钥名称例:keytool-list-v-keystoreappKey回车,输入密钥密码,获取发布版SHA1结束…

    2022年8月11日
    2
  • 三菱modbusRTU通讯设置表_modbus通讯实例

    三菱modbusRTU通讯设置表_modbus通讯实例点击箭头处“工业之家”,选择“关注公众号”!三菱PLC接线图干货此次主要描述的是关于三菱FX5U模块硬件的接线实例,主要有以下几个方面:电源AC、DC接线、输入输出接线、模拟量接线。不同原理不同的接线方式,现在来给大伙仔细讲解分享!AC电源接线例:漏型输入[-公共端]时的电源接线例源型输入[+公共端]时的电源接线例使用FX5-1PSU-5V时的外部接线例(漏型输入[-公共端])…

    2022年9月10日
    0
  • OpenCV-python安装教程

    OpenCV-python安装教程一、前提你的电脑里已经有了pip、numpy;关于pip的安装的,可以看看我的另外一篇:弯路之pip安装更新重装没有的话先去安装。(有些时候也可能是你的pip版本太低,最好也去更新一下)二、安装进入cmd命令行,直接输入pipinstallopencv-python然后回车就可以了。如图:三、后续检验打开随意的一个后缀名为py的文件或者创建一个,或者直接在…

    2022年6月12日
    22

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号