Unity 加载AssetBundle中AB包的几种方式

前言:
在unity中创建一个Cube,设置成预制体,生成AssetBundle中AB包,生成包代码如下:
BuildPipeline.BuildAssetBundles(dir,BuildAssetBundleOptions.None ,BuildTarget.StandaloneWindows64);参数分别为:地址,压缩方式和压缩指定的平台,不同的平台有不同的显示。
加载AB包的方法:
第一种:使用LoadFormFile加载
1.1 var myLoadForm = AssetBundle.LoadFromFile(path);//path为ab包地址
if (myLoadForm == null)
{
Debug.Log(“无法加载AssetBundle”);
yield break;
}
var prefab = myLoadForm.LoadAsset(“CubeWall”);
Instantiate(prefab);
myLoadForm.Unload(false);
1.2使用LoadFormFile异步加载
AssetBundleCreateRequest bundleLoadRequest = AssetBundle.LoadFormFileAsync(File.ReadAllBytes(path));
yield return bundleLoadRequest;
var myLoadAssetBundle = bundleLoadRequest.assetBundle;
if (myLoadAssetBundle == null)
{
Debug.Log(“无法加载AssetBundle”);
yield break;
}
var assetLoadRequest = myLoadAssetBundle.LoadAssetAsync(“CubeWall”);
yield return assetLoadRequest;
GameObject prefab = assetLoadRequest.asset as GameObject;
Instantiate(prefab);
myLoadAssetBundle.Unload(false);
第二种:使用LoadFromMemoryAsync加载
AssetBundleCreateRequest bundleLoadRequest = AssetBundle.LoadFromMemoryAsync(File.ReadAllBytes(path));
yield return bundleLoadRequest;
var myLoadAssetBundle = bundleLoadRequest.assetBundle;
if (myLoadAssetBundle == null)
{
Debug.Log(“无法加载AssetBundle”);
yield break;
}
var assetLoadRequest = myLoadAssetBundle.LoadAsset(“CubeWall”);
Instantiate(assetLoadRequest);
第三种:使用LoadFromCacheOrDownload加载
while (!Caching.ready)
{
yield return null;
}
WWW www = WWW.LoadFromCacheOrDownload(path, 1);//path可以使服务器网址,也可以是本地网址加载
yield return www;
if (www.error != null)
{
Debug.Log(www.error);
yield break;
}
AssetBundle ab = www.assetBundle;
GameObject prefab = ab.LoadAsset(“CubeWall”);
Instantiate(prefab);
第四种:使用UnityWebRequest加载
string url = “”;//URL为服务器网址或本地网址文件加载
UnityWebRequest request = UnityWebRequest.GetAssetBundle(url);
yield return request.SendWebRequest();
AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request);
GameObject cube = ab.LoadAsset(“CubeWall”);
Instantiate(cube);
最后说一下加载manifest文件方法
AssetBundle manifestAB = AssetBundle.LoadFromFile(path);//path打包文件夹的总AssetBundle
AssetBundleManifest manifest = manifestAB.LoadAsset(“AssetBundleManifest”);//这句话不能修改
//string[] strs = manifest.GetAllAssetBundles();//得到包中所有的assetbundle
//foreach (var name in strs)
//{
// print(name);
//}
string[] strs = manifest.GetAllDependencies(“某个assetbundle名字”);//得到某个assetbundle的依赖包
foreach (string name in strs)
{
print(name);
AssetBundle.LoadFromFile(“AssetsBundles/”+name);
}
多看看官方API,讲解非常清楚

猜你喜欢

转载自blog.csdn.net/qq_38456478/article/details/79626410