关于Unity AssetBundle – 加载本地AssetBundle
一、前提知识:
1、导出的AssetBundle主要包含两类文件:各类资源的assetbundle文件和对应的manifest文件
2、assetbundle文件是需要下载或者加载的文件,manifest文件是用于展示的各项资源的依赖关系文件
3、加载资源时需要的依赖关系文件包含在不带后缀名的、由用户自定义的assetbundle文件。manifest文件只是用于本地的增量打包
二、加载本地AssetBundle
//检测平台
#if UNITY_STANDALONE_WIN
string localPath = “LOCAL_PATH”;
string wwwPath = “WEB_PATH”;
#endif
可以使用协程
void Start () {
...
StartCoroutine(DownloadAssetBundle());
}
IEnumerator LoadAssetBundleFromFile()
{
...
}
在协程中可以进行资源的加载
首先需要加载没有后缀名的那个由用户定义名称的assetbundle文件,它存储了所有资源依赖关系
加载的assetbundle文件中包含一个名为"assetbundlemanifest"的AssetBundleManifest 类型文件,利用LoadAsset加载
string manifestName = "assetbundlemanifest";
AssetBundle assetBundle = AssetBundle.LoadFromFile(localPath + assetBundleName);
AssetBundleManifest manifest = assetBundle.LoadAsset<AssetBundleManifest>(manifestName);
通过得到的manifest文件,获取各类资源的依赖关系
string[] dps = manifest.GetAllDependencies(assetName);
根据所得的依赖关系加载其它相关资源,加载的assetbundle资源中包含了所需的Asset资源
for (int i = 0; i < nameArray.Length; i++)
{
assetBundleList.Add(AssetBundle.LoadFromFile(localPath + nameArray[i]));
}
加载你的目标assetbundle
goalBundle = AssetBundle.LoadFromFile(path);
目前加载assetbundle获取的资源在内存中以镜像包的形式存在,需要使用LoadAsset获取到真正可用的资源,并实例化
GameObject redSphere = goalBundle.LoadAsset<GameObject>("Assets/Prefabs/Sphere.prefab");
Instantiate(redSphere);