Unity AssetBundle加载资源包的四种方式
方式1 AssetBundle.LoadFromMemoryAsync 从内存异步加载
先通过File转化成byte数组,再从字节数组里读取转化成Assetbundle
IEnumerator aaa()
{
string ziyuan = "/Perfabs/xxx.assetbundle";//项目路径下的某个包
AssetBundleCreateRequest request = AssetBundle.LoadFromMemoryAsync(File.ReadAllBytes(ziyuan));//创建一个请求,异步的方式
yield return request;//等待load完成
AssetBundle ab = request.assetBundle;//加载完后取到request里面的assetBundle对象
//加载方式相同
GameObject obj = ab.LoadAsset<GameObject>("xxx");
}方式2 AssetBundle.LoadFromFile 从文件加载
void bbb()
{
string path = "C:/Users/zhengwenke/Documents/unity/new/and/xxx.assetbundle";//完整路径
AssetBundle ab = AssetBundle.LoadFromFile(path);
GameObject obj = ab.LoadAsset<GameObject>("xxx");
}方式3 服务器加载或者本地加载
这种方式将要被UnityWebRequest代替,unity2017之后尽量使用第二种和第四种
IEnumerator ccc()
{
//这是从本地路径加载,如果从服务器加载直接把http的地址换一下就可以了
string path = @"file://D:\VMNEW\Trunk\Resources\Model32\77426_box.assetbundle"; //路径斜杠不能写错,不然会报未知错误
while (Caching.ready == false)
{
yield return null;
}
WWW www = WWW.LoadFromCacheOrDownload(path, 1);
yield return www;
//www有错误不会终止运行,所以要判断是否有错误信息
if (string.IsNullOrEmpty(www.error)==false)
{
Debug.Log(www.error);
yield break;
}
AssetBundle ab = www.assetBundle;
//加载方式相同
GameObject obj = ab.LoadAsset<GameObject>("xxx");
}方式4 服务器加载或者本地加载
IEnumerator ddd()
{
//这是从本地路径加载,如果从服务器加载直接把http的地址换一下就可以了
string uri = @"file:///C:/Users/zhengwenke/Documents/unity/new/and/xxx.assetbundle";
UnityWebRequest request = UnityWebRequest.GetAssetBundle(uri);
yield return request.SendWebRequest();
//第一种方式
AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request);
//第二种方式
//AssetBundle ab = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle;
//加载方式相同
GameObject obj = ab.LoadAsset<GameObject>("xxx");
}WWW的加载方式,在运行的时候会自动生成该包里的缓存在C盘里,如果下次再解压这个包,它会先去这个缓存里找,没有的话才会加载,所以不想让它有缓存的话,就用本地路径加载的方式,下图是目录位置
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!