1.什么是AssetsBundle
AssetBundle首先从字面意思理解为资源捆绑,那么他的作用就是将一部分资源(模型,贴图,材质,预制体,声音场景等等),打包压缩在一起。
2.AssetsBundle的作用
1.减少包体大小
2.热更新
3.如何使用AssetsBundle
1.创建一个预制体,如示例Player
2.选中预制体,设置AssetsBundle的名字,如示例Player
设置了assetsbundle的名字,则表明该预制体需要打包,同样名字的资源,会打进同一个assertsbundle里
3.添加打包工具按钮,执行打包操作
using UnityEngine;
using System.Collections;
using UnityEditor;
public class CreatAssetBundle {
[MenuItem("Assets/BuildAssetBundle")]
static void BuildAssetBundle()
{
Debug.Log("Make AssetsBundle");
BuildPipeline.BuildAssetBundles("Assets/AssetsBundle", BuildAssetBundleOptions.None, BuildTarget.StandaloneOSXUniversal);
}
}
打包AIP是BuildPipeline.BuildAssetBundles(“Assets/AssetsBundle”, BuildAssetBundleOptions.None, BuildTarget.StandaloneOSXUniversal);
参数解析(打包后的AssetsBundle存放路径,压缩方式,平台)
压缩方式:
1)BuildAssetBundleOptions.None:使用LZMA算法压缩,压缩的包更小,但是加载时间更长,需要解压全部
2)BuildAssetBundleOptions.UncompressedAssetBundle:不压缩,包大,加载快
3)BuildAssetBundleOptions.ChunkBasedCompression:使用LZ4压缩,压缩率没有LZMA高,但是我们可以加载指定资源而不用解压全部。
注意:使用LZ4压缩,可以获得可以跟不压缩相媲美的加载速度,而且比不压缩文件要小。
4.打包后的资源
文件后缀为.manifest是包信息
5.通过WWW加载打包文件
在场景创建一个空物体,命名为AssetManager,然后加上LoadAssetBundle.cs脚本
using UnityEngine;
using System.Collections;
public class LoadAssetBundle : MonoBehaviour {
public string url;
public string assetname;
// Use this for initialization
IEnumerator Start () {
using( WWW www = new WWW(url))
{
yield return www;
if (www.error != null)
{
Debug.Log("网络错误");
}
else
{
AssetBundle bundle = www.assetBundle;
Object obj = bundle.LoadAsset(assetname);
Instantiate(obj);
bundle.Unload(false);
}
www.Dispose();
}
}
}
创建两个string对象,一个传入assetsbundle所在路径,一个传入assetsbundle的名字