AB打包的使用
- 前言
- 加載方法
- 講解
前言
本文章隻有打包完的使用方法 ,需要打包的方法檢視我的上一篇部落格
https://blog.csdn.net/weixin_42746271/article/details/89791901
加載方法
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using UnityEngine.Networking;
public class LoadFromFileExample : MonoBehaviour {
private string path;
void Start()
{
path = "AssetBundles/kaka.luete";
//從記憶體中異步加載
StartCoroutine(LoadFromMemoryAsync());
//記憶體中同步加載
LoadFromMemory();
//本地中異步加載
StartCoroutine(LoadFromFileAsync());
//從緩存或伺服器上加載
StartCoroutine(LoadFromCache());
//第四種方法,最常用的方法,使用UnityWebRequest加載
StartCoroutine(LoadFromUnityWebRequest());
}
/// <summary>
/// 第一種加載AB的方式,從記憶體中異步加載
/// </summary>
IEnumerator LoadFromMemoryAsync()
{
AssetBundleCreateRequest requst = AssetBundle.LoadFromMemoryAsync(File.ReadAllBytes(path));
yield return requst;
AssetBundle ab = requst.assetBundle;
GameObject wallPrefab = ab.LoadAsset<GameObject>("wall");
Object[] objs = ab.LoadAllAssets();
foreach (Object o in objs)
{
Instantiate(o);
}
}
/// <summary>
/// 第一種加載AB的方式,從記憶體中同步加載
/// </summary>
void LoadFromMemory()
{
//AssetBundleCreateRequest requst = AssetBundle.LoadFromMemoryAsync(File.ReadAllBytes(path));
//AssetBundle ab = requst.assetBundle;
AssetBundle ab = AssetBundle.LoadFromMemory(File.ReadAllBytes(path));
GameObject wallPrefab = ab.LoadAsset<GameObject>("wall");
Object[] objs = ab.LoadAllAssets();
foreach (Object o in objs)
{
Instantiate(o);
}
}
/// <summary>
/// 第2種加載AB的方式,從本地中異步加載
/// </summary>
IEnumerator LoadFromFileAsync()
{
AssetBundleCreateRequest requst = AssetBundle.LoadFromFileAsync(path);
yield return requst;
AssetBundle ab = requst.assetBundle;
GameObject wallPrefab = ab.LoadAsset<GameObject>("wall");
Object[] objs = ab.LoadAllAssets();
foreach (Object o in objs)
{
Instantiate(o);
}
}
/// <summary>
/// 第三種加載AB包方式,從緩存或伺服器上加載(已經棄用)
/// </summary>
IEnumerator LoadFromCache()
{
while (!Caching.ready)
{
//暫停一幀繼續循環判斷caching什麼時候ready
yield return null;
}
//從本地
//WWW www= WWW.LoadFromCacheOrDownload(@"file://D:\UnityStudy\MyAB\AssetBundles\tt\wall.unity3d", 1);
//從伺服器
WWW www = WWW.LoadFromCacheOrDownload(@"http://localhost/AssetBundles/wall.unity3d", 1);
//等待下載下傳完成
yield return www;
if (string.IsNullOrEmpty(www.error) == false)
{
Debug.Log(www.error);
yield break;
}
AssetBundle ab = www.assetBundle;
GameObject wallPrefab = ab.LoadAsset<GameObject>("wall");
Object[] objs = ab.LoadAllAssets();
foreach (Object o in objs)
{
Instantiate(o);
}
}
/// <summary>
/// 第四種方法,最重要的一種方法,使用比較多(取代WWW類)
/// </summary>
/// <returns></returns>
IEnumerator LoadFromUnityWebRequest()
{//從本地
string uri = @"file:///D:\Unity2017的工程\AB打包試驗\AssetBundles\kaka.luete";
//從伺服器
// string uri = @"http://localhost/AssetBundles/wall.unity3d";
UnityWebRequest request = UnityWebRequest.GetAssetBundle(uri);
//使用Send方法進行下載下傳
yield return request.Send();
// AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request);
AssetBundle ab = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle;
GameObject wallPrefab = ab.LoadAsset<GameObject>("kaka");
Object[] objs = ab.LoadAllAssets();
foreach (Object o in objs)
{
Instantiate(o);
}
}
}
講解
上邊呢是使用了四種方法加載,本次使用本地加載方法(最後一種)
首先記得修改路徑為你的本地路徑
然後呢修改你的名字 ,就是你的AB包的名字
完事