【官方文档】概念理解
Unity Documentation - AssetBundle
Unity Documentation - 本机使用 AssetBundle
【基础知识】
CSDN - Unity中AB包详解(超详细,特性,打包,加载,管理器)
AssetBundle热更新完整工作流与知识点解析
不可以包含代码文件:AssetBundle是Unity中用于打包和分发资源的一种文件格式。它是一个包含特定平台非代码资源的存档文件,例如模型、纹理、预制件、音频剪辑,甚至整个场景
可能具有依赖关系:可以在一个AB包引用另一个AB包的东西,可以压缩(便于传输),内含序列化数据或者资源文件(纹理、音频、Prefab乃至场景等二进制数据块,加载他们是在Unity的另一个线程进行的)
用于动态加载:动态加载的资源打AB包,非动态加载的资源不用打。什么是动态加载?是指在游戏运行时根据需要从外部加载资源,而不是在游戏启动时将所有资源都加载到内存中。所以粗略划分来讲从loading到进入游戏到主界面这个流程以外的东西都可以动态加载。
压缩是可选的:默认是压缩的,但是可以不压缩。压缩减少网络占用(但是解压也耗时间和计算资源),不压缩就加载快(不用解压嘛)。默认压缩是LZMA,但是也支持LZ4。LZ4是块压缩,LZMA是字典压缩(基于Lempel-Ziv算法和马尔可夫链,把数据看做流)
AssetBundle文件构成:
载入:下载+加载
AB包的使用分两种情况,一是本地直接LoadFromFile,二是UnityWebRequestAssetBundle从指定URL下载,然后按照下面的方法读取其中资源使用:
// LoadAsset(string)会把资源转换为T类型 // 例如下面函数从叫做bundl的AB包中加载名为"myObject"的资源 GameObject obj = bundle.LoadAsset("myObject"); AssetBundle的卸载使用.Unload(bool),需要注意的是传入的bool对应两种卸载策略
AssetBundle.Unload(true) 卸载从 AssetBundle 加载的所有游戏对象(及其依赖项)。这不包括复制的游戏对象(例如实例化的游戏对象),因为它们不再属于 AssetBundle。
如果应用程序必须使用 AssetBundle.Unload(false),则只能以两种方式卸载单个对象:
Resources.UnloadUnusedAssets。Resources.UnloadUnusedAssets。
Resources.UnloadUnusedAssets并不是专门针对 “Resources” 文件夹的内容,而是针对在内存中加载的所有资源。
官方文档:Unity Documentation - StreamingAssets
CSDN - 详解Unity中的StreamingAssets文件夹
Unity中的StreamingAssets文件夹通常用于存放需要在运行时动态加载的资源文件,事实上StreamingAssets文件夹和Resource文件夹在打包时都会原封不动地加入游戏包中。
StreamingAssets:流媒体资源,典型的例子是视频,不是一直用得到,也没必要一直放在内存中,需要时加载就行
Resources是压缩且加密的,StreamingAsset是原封不动的不作任何处理的。
特点:
AB包打包时涉及到这个文件夹(一般会有Copy to StreamingAsset选项),这是显而易见的,把AB放在这里可以满足动态加载的需要
Unity Blog - Asset Bundles vs. Resources: A Memory Showdown
Unity Learn - Assets, Resources and AssetBundles
Unity 资源加载的两种方式:Resources和AssetBundle最详细的解析
使用Resources.Load方法从Resource文件夹里加载。Resource会将Resource文件夹的所有资源打包到安装包中(相应地,包体增大)。但是运行游戏时,这个文件夹并不是全部加载的,而是按需通过Resources.Load加载,但是Resources.Load加载的资源会一直存在于内存中(可以手动卸载)
AssetBundle允许按需加载和动态加载资源,可以根据需要进行资源的加载和卸载,从而降低内存占用。
重复与忽略:
CSDN - 【游戏开发探究】Unity Addressables资源管理方式用起来太爽了,资源打包、加载、热更变得如此轻松(Addressable Asset System | 简称AA)
AA底层也是AB(能够轻松逆向),但是中国版AA多了加密功能
补充:
关于下载部署完热更的选择:资源校对通过后不一定跳转到Launch场景,也可能是去重启游戏
关于判断是否需要热更
针对内存占用较高的情况,可以采取以下优化措施:
要指出的是资源压缩只是减少磁盘空间占用,而且还得额外耗费CPU资源解压,解压之后还和原先占用的内存是一样的
第五点说的动态加载得是AB包方式,因为如果是Resource方式,即便是动态加载,资源确实会一直存在内存中
CSDN - Unity文件操作路径
上一篇:为什么我下载的快手是精选
下一篇:4g畅聊安卓版