您的位置:首页 > 移动开发 > Unity3D

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

2018-03-20 15:29 423 查看
前言:

在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,讲解非常清楚
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: