AssetBundle的简介
在很多类型游戏的制作过程中,开发者都会考虑一个非常重要的问题,即如何在游戏运行过程中对资源进行动态的下载和加载。为此,Unity引擎引入了AssetBundle这一技术来满足开发者的上述需求,一方面,开发者可以通过AssetBundle将游戏中所需要的各类资源打包压缩并上传到网络服务器上;另一方面,在运行时游戏可以从服务器上下载该资源,从而实现资源的动态加载。在本章将对AssetBundle的使用和管理进行详细的介绍。
一般情况下,AssetBundle的工作流程大致如下:
1、 开发过程中,开发者创建好AssetBundle文件并上传至服务器上,其过程如图所示:
将AssetBundle文件上传至服务器
· 创建AssetBundle:开发者可以在Unity编辑器中通过脚本来创建满足要求的AssetBundle文件,关于详细的创建方法,后面会介绍
· 上传至服务器:开发者创建好AssetBundle文件后,即可通过上传工具(比如FTP等)将其上传至服务器中,从而使游戏通过访问服务器来获取所需的资源。
2、游戏运行时,客户端会根据实际需求从服务器上将适当的AssetBundle下载到本地机器,再通过加载模块将其资源加载到游戏中,其过程如图所示:
从服务器下载AssetBundle文件
· 下载AssetBundle:Unity提供了一套完整的API供开发者使用,从而完成从服务器端下载AssetBundle文件。
· 加载AssetBundle中的Assets:AssetBundle文件一旦下载完成,开发者即可通过特定的API来加载其所包含的Assets,包括模型、纹理、动画片段等。
Unity5新的AssetBundle系统对Unity4.x版本的AssetBundle系统进一步地简化,提供的简单的UI和更简单的脚本。Unity在Build时会自动处理依赖关系,并生成一个.manifest文件,以及AssetBundle的增量式发布。
AssetBundle的打包接口
AssetBundle是Unity引擎提供的一种用于存储资源的文件格式,它可以存储任意一种Unity引擎能够识别的资源,例如模型、纹理、音频、动画片段甚至整个场景等。同时,AssetBundle也可以包含开发者自定义的二进制文件,只需将二进制文件的后缀名改成“.bytes”,Unity引擎即可将其识别为TextAsset,进而可以被打包到AssetBundle文件中。这就意味着我们可以在代码中将游戏中的表格等配置数据序列化为二进制格式,打包到AssetBundle中使用。
用户可以通过AssetBundle的UI和简单的脚本在Unity中创建AssetBundle文件,Unity引擎提供了二种创建AssetBundle的API,分别如下:
l BuildPipeline.BuildAssetBundles
通过该接口,开发者可以将编辑器中指定的Assets打包。
l BuildPipeline.BuildPlayer
通过该接口,开发者可以将场景编译成播放器。
AssetBundle的UI
Unity5提供了一个简单AssetBundle的UI,可以让用户简单快速的将Asset标记到AssetBundle中。
如图所示,在资源的Inspector视图中的下方会出现一个AssetBundle的UI,其中第一个选项表示该资源所标记的AssetBundle名称(即该资源会打包到这个名称的AssetBundle中),标记名称要小写,可以有后缀(如a.assetbundle/a.unity3d),但是脚本Script不能标记AssetBundle。
第二个参数用于设置AssetBundle Variant,主要应用在不同分辨率资源的使用和动态替换AssetBundle。
当AssetBundle标记的对象很多时,想要看到某个AssetBundle中的资源时,可以单击AssetBundle的名称选项,在弹出的菜单中选择”Filter Selected Name”项,或者在Project视图中搜索”b:AssetBundle名称”,即可查找该AssetBundle里包含的所有资源,如图所示。输入"b:"可以查找所有的AssetBundle。