unity加载存在依赖关系的AssetBundle文件时,先加载被依赖项,然后加载依赖项。举个例子,一个AssetBundle名字为“test”,依赖另一个AssetBundle的名字为“m1”,加载test之前应该先加载manfest文件查找配依赖项m1先行加载.示例代码如下所示:
public string manifestName="AssetBundles";
public string assetBundleName = "test";
IEnumerator Start()
{
string assetBundlePath = "file://" + Application.dataPath + "/AssetBundles/";
//manifest所在目录
string manifestPath = Application.dataPath + manifestName;
//首先加载Manifest文件
WWW wwwManifest = WWW.LoadFromCacheOrDownload(manifestPath, 0);
yield return wwwManifest;
if (wwwManifest.error==null)
{
AssetBundle manifestBundle = wwwManifest.assetBundle;
AssetBundleManifest manifest = (AssetBundleManifest)manifestBundle.LoadAsset("AssetBundleManifest");
manifestBundle.Unload(false);
//获取依赖文件列表
string[] dependentAssetBundles = manifest.GetAllDependencies(assetBundleName);
AssetBundle[] abs = new AssetBundle [dependentAssetBundles.Length];
for (int i = 0; i < dependentAssetBundles.Length; i++)
{
//加载所有的依赖文件
WWW www = WWW.LoadFromCacheOrDownload(assetBundlePath+dependentAssetBundles[i], 0);
yield return www;
abs[i] = www.assetBundle;
}
WWW www2 = WWW.LoadFromCacheOrDownload(assetBundlePath+assetBundleName,0);
yield return www2;
AssetBundle assetBundle = www2.assetBundle;
}
else
{
Debug.Log(wwwManifest.error);
}
}