天天看點

AB打包的使用方法前言加載方法講解

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打包的使用方法前言加載方法講解

然後呢修改你的名字 ,就是你的AB包的名字

AB打包的使用方法前言加載方法講解

完事