1、什么是AssetBundle
AssetBundle
是Unity
pro提供的一种用来存储资源的文件格式,它可以存储任意一种Unity引擎能够识别的资源,如Scene、Mesh、Material、
Texture、Audio、noxss等等,同时,AssetBundle也可以包含开发者自定义的二进制文件,只需要将自定义文件的扩展名改
为.bytes,Unity就可以把它识别为TextAsset,进而就可以被打包到AssetBundle中。Unity引擎所能识别的资源我们称为
Asset,AssetBundle就是Asset的一个集合。
AssetBundle的特点:
压缩(缺省)、动态载入、本地缓存;
2、AssetBundle VS Resource
AssetBundle作为Unity官方推崇的资源更新方案,与传统的Resource差异如下:
a、Resource放在Resources目录下,resources.assets文件,单个文件有2GB限制,首次必须全部下载;
b、AssetBundle创建需要通过Editor脚本创建,支持动态下载,是Unity Web Caching License唯一可以缓存的内容;
3、AssetBundle的适用平台与跨平台性
AssetBundle适用于多种平台,包括网页应用、移动应用、桌面应用等,可以动态更新,但不同平台所使用的AssetBundle并不相同,在创建离线AssetBundle的时候需要通过参数来指定目标平台,相容关系如表所示:
4、AssetBundle的工作流程(与flash加载swf类似)
a、创建AssetBundle;
b、上传到Server;
c、游戏运行时根据需要下载(或者从本地cache中加载)AssetBundle文件;
d、解析加载Assets;
e、使用完毕后释放;
5、创建AssetBundle
5.1、如何创建AssetBundle
Unity引擎提供了创建AssetBundle的API,通过编译管线BuildPipeline来创建AssetBundle文件,总共有三种方法:
a、
BuildPipeline.BuildAssetBundle(mainAsset : Object, assets : Object[],
pathName : string, options : BuildAssetBundleOptions =
BuildAssetBundleOptions.CollectDependencies |
BuildAssetBundleOptions.CompleteAssets, targetPlatform : BuildTarget =
BuildTarget.WebPlayer) : bool
该API将编辑器中的任意类型的Assets打包成一个AssetBundle,适用于对单个大规模场景的细分;
b、BuildPipeline.BuildStreamedSceneAssetBundle(level : string[], locationPath : string, target : BuildTarget) : String
该API将一个或多个场景中的资源及其所有依赖以流加载的方式打包成AssetBundle,一般适用于多单个或多个场景进行集中打包;
c、
BuildPipeline.BuildAssetBundleExplicitAssetNames(assets : Object[],
assetNames : string[],pathName : string, options :
BuildAssetBundleOptions = BuildAssetBundleOptions.CollectDependencies |
BuildAssetBundleOptions.CompleteAssets, targetPlatform : BuildTarget =
BuildTarget.WebPlayer) : bool
该API功能与a相同,但创建的时候可以为每个Object指定一个自定义的名字。(一般不太常用)
5.2、关于BuildAssetBundleOptions
a、