AssetBundle的定义和作用:
1,AssetBundle是一个压缩包包含模型、贴图、预制体、声音、甚至整个场景,可以在游戏运行的时候被加载。
2,AssetBundle自身保存着互相的依赖关系。
3,压缩包可以使用LZMA和LZ4压缩算法,减少包大小,更快的进行网络传输。
4,把一些可以下载内容放在AssetBundle里面,可以减少安装包的大小。
AssetBundle使用流程(打包方法):
1,首先要选中需要打包的资源在Inspector面板最下方指定这个资源的AssetBundle属性(包名和后缀),注意这里的名字和后缀是不区分大小写的,如下图:
2,构建AssetBundle,这里需要用到编辑器扩展技术,我把资源打包在了StreamingAssets目录下,这是一个Assets下的特殊目录,StreamingAssets也就是流式资源载入目录,该目录被拷贝到build文件夹中,不会修改,一般用于放置音频文件。代码如下:
public class CreateAssetBundles
{
[MenuItem("Tools/Build AssetBundle")]
static void CreateAssetBundle()
{
string path = "Assets/StreamingAssets";
if(Directory.Exists(path) == false)//判断这个文件夹存不存在 {
Directory.CreateDirectory(path);
}
BuildPipeline.BuildAssetBundles(path, BuildAssetBundleOptions.None, BuildTarget.Android);
}
}
3,在编辑器下面打包出来的AB包可以放在本地上,也可以放在服务器上加载。
AssetBundle资源的加载(本地加载,服务器下载):
1,本地同步加载AssetBundle包并且获取包的内容方式,AssetBundle.LoadFromFile(string path),从磁盘上的文件同步加载AssetBundle,代码如下:
private void LoadFromFile(string path)
{
//传入这个AB包存在本地的路径加载本地资源 AssetBundle ab = AssetBundle.LoadFromFile(path);
//获取可使用AssetBundle这个类里面的LoadAsset(string name)方法获取资源 GameObject wallPrefab = ab.Lo