1. 程式人生 > >Unity 4.x 資源加載

Unity 4.x 資源加載

通過 sha rom ready 因此 mono empty creat mon

using UnityEngine;
using System.Collections;
using System.IO;

public class LoadResource : MonoBehaviour
{
    //assetbundle 的後綴實際上可以隨意自定義的
    string PathAssetBundle = "D:/LgsTest/ResourcePath/Cube.assetbundle";
    void Start()
    {
        //StartCoroutine(LoadFromMemoryAsync());
        //LoadFromMemorySync();
        //LoadFromLocalFile();
        StartCoroutine(LoadFromWWW());
    }

    #region 第一種加載AB的方式,從內存中加載

    //通過Bundle的二進制數據,異步創建AssetBundle對象。完成後會在內存中創建較大的WebStream。
    //調用時,Bundle的解壓是異步進行的,因此對於未壓縮的Bundle文件,該接口與CreateFromMemoryImmediate等價。
    IEnumerator LoadFromMemoryAsync()
    {
        AssetBundleCreateRequest request = AssetBundle.CreateFromMemory(File.ReadAllBytes(PathAssetBundle));
        yield return request;
        AssetBundle bundle = request.assetBundle;
        Instantiate(bundle.Load("Cube"));
    }
   
    void LoadFromMemorySync()
    {
        AssetBundle bundle = AssetBundle.CreateFromMemoryImmediate(File.ReadAllBytes(PathAssetBundle));
        Instantiate(bundle.Load("Cube"));
    }
    #endregion

    #region 第二種加載AB的方式,從本地中加載

    //加載的資源只能是未壓縮的(即在打包資源的時候要加上 BuildAssetBundleOptions.UncompressedAssetBundle),壓縮過的資源會加載失敗
    //通過未壓縮的Bundle文件,同步創建AssetBundle對象,這是最快的創建方式。創建完成後只會在內存中創建較小的SerializedFile,而後續的AssetBundle.Load需要通過IO從磁盤中獲取。
    void LoadFromLocalFile()
    {
        AssetBundle bundle = AssetBundle.CreateFromFile(PathAssetBundle);
        Instantiate(bundle.Load("Cube"));
    }

    #endregion

    #region 第三種加載AB的方式,通過WWW加載

    IEnumerator LoadFromWWW()
    {
        while (!Caching.ready)
            yield return null;
        WWW www = GetWWWInstance(false, PathAssetBundle);
        yield return www;

        if (!string.IsNullOrEmpty(www.error))
        {
            Debug.Log(www.error);
            yield break;
        }

        AssetBundle bundle = www.assetBundle;
        Instantiate(bundle.Load("Cube"));
    }

    //WWW對象的獲取方式有兩種
    //方式一 :加載Bundle文件並獲取WWW對象,完成後會在內存中創建較大的WebStream
    //方式二:加載Bundle文件並獲取WWW對象,同時將解壓形式的Bundle內容存入磁盤中作為緩存(如果該Bundle已在緩存中,則省去這一步),
    //       完成後只會在內存中創建較小的SerializedFile,而後續的AssetBundle.Load需要通過IO從磁盤中的緩存獲取。
    WWW GetWWWInstance(bool isNew, string url)
    {
        WWW www = null;
        if (isNew)
            www = new WWW(url);
        else
            www = WWW.LoadFromCacheOrDownload(url, 0);
        return www;
    }

    #endregion
}

  

Unity 4.x 資源加載