#AssetBundle作用原理
把资源导出成一种叫做AssetBundle的文件,然后打包后可以在Unity程序运行的时候再加载回来用。
AssetBundle是采取某一种压缩方式压缩成的资源文件。节省存储空间,控制游戏包的大小,实现游戏的热更新。
AssetBundle文件分类
AssetBundle文件可以分为两类:序列化文件(serialized file)和资源文件(resource files)。
serialized file:资源被打碎放在一个对象中,最后统一被写进一个单独的文件(只有一个)。
resource files:某些二进制资源(图片、声音)被单独保存,方便快速加载。
AssetBundle分组策略
Ab分组策略:
- 逻辑实体分组
1)一个UI界面 或 所有UI界面一个包(界面里的贴图和布局信息一个包)
2)一个角色 或 所有角色一个包(这个角色里面的模型和动画一个包)
3)所有的场景所共享的部分一个包(包括贴图和模型) - 按照类型分组
所有声音资源打成一个包,所有shader打成一个包,所有模型打成一个包,所有材质打成一个包 - 按照使用分组
1)把在某一时间需要同时加载的所有资源打成一个包。可以按照关卡或场景划分,一个关卡或场景所需要的所有资源包括角色、贴图、声音等打成一个包
2)把被其他包所共享的资源放在一个单独的包里面
3)把经常更新的资源放在一个单独的包里面,跟不经常更新的包分离 - 版本更新分组
如果对于一个同一个资源有两个版本,可以考虑通过后缀来区分,如v1/v2/v3.unity3d
BuileAssetBundles
AssetBundle使用相关API:BuildPipeline.BuildAssetBundles(dir, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
结合Unity Editor使用如下:
#if UNITY_EDITOR
using UnityEditor;
using System.IO;
public class BulidAssetBundle
{
//编辑器扩展,在菜单栏Assets下生成Build AssetBundles菜单
[MenuItem("Assets/Build AssetBundles")]
//进行资源打包
static void BuildAllAssetBundles()
{
string dir = "AssetBundle"; //使用相对路径保存,文件夹AssetBundle在为工程目录下
if (Directory.Exists(dir) == false) //打包之前要保证文件夹存在,不存在的话会报错
{
Directory.CreateDirectory(dir);
}
//BuildPipeline是UnityEditor中用于打包的类,其中的BuildAssetBundle用于AssetBundle打包
BuildPipeline.BuildAssetBundles(dir, BuildAssetBundleOptions.ChunkBasedCompression, BuildTarget.StandaloneWindows64);
//dir:存储的路径
//BuildAssetBundleOptions:表示压缩式的算法
//BuildTarget: 表示用于什么平台
}
/*关于BuildAssetBundleOptions的算法选择*/
//Bui