Unity之AssetBundle打包
AssetBundle
Resources:表示U3D自动将资源打成一个AssetBundle包,所有放在Resources下的文件夹都会打成一个AssetBundle包,资源非常大,Resources文件夹在真机上最大只有2G的内存(专业版会增大内存)
AssetBundle包:其实可以看成一个压缩包(有固定格式的),默认情况下使用LZMA压缩方式压缩的资源文件;和压缩ZIP一样的,只不过里面的格式变了
Unity3D引擎为我们提供了三种压缩策略来处理AssetBundle的压缩,即:
1、LZMA格式:
在默认情况下,打包生成的AssetBundle都会被压缩。在U3D中,AssetBundle的标准压缩格式便是LZMA(LZMA是一种序列化流文件),因此在默认情况下,打出的AssetBundle包处于LZMA格式的压缩状态,在使用AssetBundle前需要先解压缩。使用LZMA格式压缩的AssetBundle的包体积最小(高压缩比),但是会相应的增加解压缩的时间
2、LZ4格式:
Unity5.3之后的版本增加了LZ4格式压缩,由于LZ4的压缩比一般,因此经过压缩后的AssetBundle包体的体积较大(该算法基于chunk)。
3、不压缩
Resources和AssetBundle的区别:
1、Resources:有2G的限制,不支持动态更新(拿Android为例)
a、上线后,Resources里面的资源都在APK里面,只能读不能写
b、StreamingAssets和dataPath都是在Apk中,Apk为一个压缩包,里面的东西只能读不能写,因此这个限制就决定了Resources不能支持热更新
2、PersistPath(支持热更):
a、只能手动打包
b、打包方式:
1、4.0以前,打包的依赖关系都必须手动
2、5.0以后,这种依赖关系全部自动
创建AssetBundle:AssetBundle可以将任何资源打包成assetbundle(如果是unity不能识别的文件,可以通过改变后缀进行打包)
1、在任何一个游戏物体的右下角有AssetBundle,第一个为包名,第二个为后缀(不能识别的物体不能修改,修改后缀变成能识别的物体)
更新流程:
1、代码的更新:热更新
2、资源的更新:AssetBundle更新
a、创建assetbundle
b、将assetbundle打成一个zip文件,放进streamingAssetPath里面
c、把需要更新的AssetBundle先上传到Server,如果Server有更新(与服务器版本进行比对),把server的assetbundle包下载下来(zip文件),然后解压到persistentPath里
d:加载:判断PersistentPath里是否有这个资源,如果没有就读取StreamingAssetPath里面的,如果有,就直接读取PersistentPath里的
1、LoadAsset:从资源包中加载指定的资源
2、LoadAllAsset:加载当前资源包中所以的资源
3、LoadAssetAsync:从资源包中异步加载资源
3、资源卸载:资源卸载部分使用的是Unload方法
Unload:
a、该方法会卸载运行时内存中包含在bundle中的所有资源。
b、当传入的参数为true,则不仅仅内存中的AssetBundle对象包含的资源会被销毁;根据这些资源实例化而来的游戏内的对象也会销毁
c、当传入的参数为false,则仅仅销毁内存中的AssetBundle对象包含的资源
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;//编辑器命名空间的引用 public class TestDemo { //MenuItem:附加属性
//自定义工具:提高团队的开发效率
[MenuItem("Itools/TestBuild")]
public static void BuilderAssetBundle()
{
string outputPath = Application.streamingAssetsPath + "/Test";
//BuildPipeline.BuildAssetBundles():只需要提供一个输出AssetBundle的地址即可,
//引擎会自动根据资源的assetBundleName属性批量打包,自动建立Bundle以及资源之间的依赖关系
BuildPipeline.BuildAssetBundles(outputPath, 0, EditorUserBuildSettings.activeBuildTarget);
}
}
BuildPipeline.BuildAssetBundles():
1、第一个参数:AssetBundle输出到哪一个文件夹
2、第二个参数:枚举类型,可以选择多个参数,多个参数之间可以用“|“隔开
a、CompleteAssets:保证资源的完备性,默认开启
b、CollectDependencies:用于搜集资源的依赖项,默认开启
和完整性有点相像,会把游戏物体所依赖的资源一起进行打包,防止有些被依赖的资源没有被打进去
c、DeterministicAssetBundle:用于为资源维护固定ID,默认开启
所以的资源都有固定的标记的,在资源的mate文件中的guid:64位组成的字符串,电脑里是随机生成并且唯一,每一个文件的唯一标识
d、ForceRebuildAssetBundle:用于强制重打所有AssetBundle文件,5.3以后新增
资源更新了,重新打包,将以前的资源包丢弃
e、IgnoreTypeTreeChanges:用于判断AssetBundle更新时,是否忽略TypeTree的变化,新增
打包时是否忽略父子关系
f、AppendHashToAssetBundleName:用于将Hash值添加在AssetBundle文件名之后,开启这个选项可以直接通过文件名来判断哪些Bundle的内容进行了更新
(4.X下普遍需要通过比较二进制等方法来判断,但在某些情况下即使内容不变重新打包,Bundle的二进制也会变化),新增
在包名后缀名后面添加一个Hash表
g:ChunkBasedCompression:用于使用LZ4格式进行压缩,5.3新增
BuildPipeline.BuildAssetBundles(outputPath, BuildAssetBundleOptions.AppendHashToAssetBundleName|BuildAssetBundleOptions.ChunkBasedCompression, EditorUserBuildSettings.activeBuildTarget);
AssetBundle的适用平台与跨平台性
AssetBundle适用于多种平台,包括网页应用、移动应用、桌面应用等,可以动态更新,但不同平台所使用的AssetBundle并不相同,在创建离线AssetBundle的时候需要通过参数来指定目标平台,相关关系如表所示:

IOS:在Mac版本的Standlone打包
Windows:打Android、PC、WebPlayer
Unity之AssetBundle打包的更多相关文章
- Unity——AssetBundle打包工具
Unity批量打AB包 为了资源热更新,Unity支持将所有资源打包成AssetBundle资源,存放在SteamingAssets文件夹中: 在项目发布之前,需要将所有资源打包成.ab文件,动态加载 ...
- Unity5.x版本AssetBundle打包研究
Unity5的AssetBundle打包机制和以前版本不太一样.简单的说就是,只要给你要打包的资源设置一个AssetBundleName ,Unity自身会对这些设置了名字的资源进行打包,如果一个资源 ...
- Unity3D使用Assetbundle打包加载(Prefab、场景)
之前有一篇文章中我们相惜讨论了Assetbundle的原理,如果对原理还不太了解的朋友可以看这一篇文章:Unity游戏开发使用Assetbundle加载场景的原理 本篇文章我们将说说assetbund ...
- [cb] Assetbundle打包(一)
一.简介 Unity的Assetbundle是Unity Pro提供的功能. 理解:Asset 资源,资产:Bundle :包,一批,捆:字面上的意思,就是把资源打包. 在项目中怎么使用Assetbu ...
- Unity3d 5.x AssetBundle打包与加载
1.AssetBundle打包 unity 5.x版本AssetBundle打包,只需要设置好AssetBundle的名称后,unity会自动将其打包,无需处理其他,唯独需要做的是设置好个AssetB ...
- AssetBundle打包
为热更新打基础(xlua\tolua) 素材.源码链接:http://www.sikiedu.com/course/74/task/1812/show 一.AssetBundle的定义和作用 1,As ...
- Unity中资源打包成Assetsbundle的资料整理
最近在研究Unity中关于资源打包的东西,网上看了一堆资料,这里做个整合,说整合,其实也就是Ctrl-C + Ctrl-V,不是原创 首先为了尊重原创,先贴出原创者的文章地址: http://blog ...
- 一个灵活的AssetBundle打包工具
尼尔:机械纪元 上周介绍了Unity项目中的资源配置,今天和大家分享一个AssetBundle打包工具.相信从事Unity开发或多或少都了解过AssetBundle,但简单的接口以及众多的细碎问题 ...
- AssetBundle打包详解
Unity5.x AssetBundle打包详解 在网上查看了很多资料,想详细搞清楚AssetBundle的原理.以实现符合项目需求的打包工具和加载逻辑 1. AssetBundle是什么? Asse ...
随机推荐
- 《JavaScript 设计模式与开发实战》第一部分(1、2、3章)笔记
第1章:面向对象的JavaScript 动态类型和鸭子类型 编程语言按照数据类型大体可以分为两类: ① 静态类型语言:在编译时便已确定变量的类型. ② 动态类型语言:变量类型要到程序运行的时候,待变量 ...
- OpenCV3 SVM ANN Adaboost KNN 随机森林等机器学习方法对OCR分类
转摘自http://www.cnblogs.com/denny402/p/5032839.html opencv3中的ml类与opencv2中发生了变化,下面列举opencv3的机器学习类方法实例: ...
- 关于loadrunner的了解
1.性能测试目的: 为什么要进行性能测试呢? 有些问题是只有在大并发或者压力测试下才会暴露出来的,在平常的公司内部测试中,感觉一切都是正常的,但是把服务放到生产线上,例如某个时刻突然有很多的用户要向 ...
- export 和import使用
在JavaScript ES6中,export与export default均可用于导出常量.函数.文件.模块等,你可以在其它文件或模块中通过import+(常量 | 函数 | 文件 | 模块)名的方 ...
- POJ 1284:Primitive Roots(素数原根的个数)
Primitive Roots Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5709 Accepted: 3261 Descr ...
- 学习笔记TF023:下载、缓存、属性字典、惰性属性、覆盖数据流图、资源
确保目录结构存在.每次创建文件,确保父目录已经存在.确保指定路径全部或部分目录已经存在.创建沿指定路径上不存在目录. 下载函数,如果文件名未指定,从URL解析.下载文件,返回本地文件系统文件名.如果文 ...
- Linux 下安装FastDFS v5.08 的php扩展
php扩展也需要依赖于FastDFS一些库文件,所以请先安装FastDFS,具体请看我之前的文章. 一.安装目录 php安装目录 /data/nmp/php FastDFS源码目录 /data/w ...
- MySQL 命令(导出数据):mysqldump
官方网址:https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html
- spark submit参数调优
在开发完Spark作业之后,就该为作业配置合适的资源了.Spark的资源参数,基本都可以在spark-submit命令中作为参数设置.很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何设置 ...
- 【python】参数中的*args和**kwargs
转自https://www.cnblogs.com/xuyuanyuan123/p/6674645.html#undefined 多个实参,放到一个元组里面,以*开头,可以传多个参数:**是形参中按照 ...