目录
前言:
随着移动终端的发展,在一些大型游戏中动态加载游戏模型、贴图等资源文件以及实现游戏的更新,对开者来说是非常重要的工作。本文将结合Unity的AssetBundle资源包来做到游戏的更新。
一、什么是AssetBundle
AssetBundle是将资源用Unity提供的一种用于存储资源的压缩格式打包后的集合,它是对资源管理的扩展,可以动态地加载和写在,并大大减少游戏所占地内存,即使是已经发布地游戏也可以用它来增加新的内容。
一般情况下,AssetBundle开发流程地具体步骤如下:
1)创建AssetBundle。开发人员在Unity中通过脚本将所需要地资源打包成AssetBundle文件。
2)上传至服务器。开发者将创建好的AssetBundle文件通过上传工具上传到游戏地服务器中,让游戏客户端可以通过访问服务器来获得当前需要地资源,进而实现游戏的更新。
3)下载AssetBundle。游戏运行时,客户端可以将服务器上的游戏更新所需要的AssetBundle下载到本地设备,再通过加载模块加载到游戏中。Unity提供了相应的API来完成从服务器的下载AssetBundle操作。
4)加载AssetBundle。AssetBundle文件下载完成后,通过Unity提供的API可以加载资源里的模型、贴图、音频等并将它们实例化更新到游戏客户端。
5)卸载AssetBundle,Unity提供了相应的方法来卸载AssetBundle,卸载它可以节约内存。
二、AssetBudle的基本使用
1.AssetBundle打包
Unity有自带的打包创建工具,开发者可以一目了然的打包而不需要任何代码。
步骤:
1)选中我们需要打包的资源,在我的示例项目中,有一个名为CubeAsset的预制件
2)在Inspector面板可以看到最底下的AssetBundle选项,现在为None
3)展开选项创建新的AssetBundle。(点击New命名)
注意:只有Asset目录下的资源文件可以被打包到AssetBundle中,AssetBundle的名称固定为小写字母,如果使用了大写,系统会自动转换为小写。每个AssetBundle都可以设置一个Variant,Variant其实是一个后缀,如果有不同分辨率的同名资源,可以添加不同的Variant来加以区分。
2.BuildAssetBundle
创建好的AssetBundle需要导出,这一过程需要编写代码来实现。
Unity简化了开发者遍历资源的过程,自行打包时会将规定的所有资源打包(即之前用打包工具创建并且命名的全部资源),然后将它们置于指定的文件夹中,其声明格式如下:
public static AssetBundleMainfest BuildAseetBundles(string outputPath,BuildAssetBundleOptions assetBundleOptions=BuildAssetBundleOption.None,BuildTarget targetPlatfom=BuildTarget.WebPlayer);
其中,outputPath参数是AssetBundle的输出路径,一般情况下为Assets目录下的某一个文件,如:Application.dataPath+"/AssetBundle"; assetBundleOptions参数为AssetBundle的创建选项; BuildTarget参数为AssetBundle的目标创建平台。
BuildAssetBundleOptions
None | 不使用任何特殊选项构建 assetBundle。 |
UncompressedAssetBundle | Don't compress the data when creating the AssetBundle. |
DisableWriteTypeTree | 不包括 AssetBundle 中的类型信息。 |
DeterministicAssetBundle | 使用存储在资源包中对象的 ID 的哈希构建资源包。 |