AssetBundle

来源:互联网 发布:java array contains 编辑:程序博客网 时间:2024/05/22 03:37

设置下面的AssetBundle,打包的文件


打包:

using UnityEditor;using System.IO;public class CreateAssetBundles{    [MenuItem("Assets/Build AssetBundles")]    static void BuildAllAssetBundles()    {        string dir = "AssetBundles";        if(Directory.Exists(dir)==false)        {            Directory.CreateDirectory(dir);        }        BuildPipeline.BuildAssetBundles(dir, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);    }}

加载本地的打包资源:
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEditor;public class LoadFromFileExample : MonoBehaviour {// Use this for initializationvoid Start ()    {       AssetBundle ab= AssetBundle.LoadFromFile("AssetBundles/scene/capsulewall.unity3d");        GameObject go = ab.LoadAsset<GameObject>("Capsulewall");        Instantiate(go);        //Object[] objs = ab.LoadAllAssets();    //得到所有的模型        //foreach(Object o in objs)        //{        //    Instantiate(o);        //}    }// Update is called once per framevoid Update () {}}


依赖打包:
把共有的资源也打包,AssetBundle为Share,系统会自动分配
加载的时候先加载依赖包,依赖包是共有的资源


BuildAssetBundleOptions:


加载:


using System.Collections;using System.Collections.Generic;using UnityEngine;using System.IO;using UnityEngine.Networking;public class LoadFromFileExample : MonoBehaviour {// Use this for initializationIEnumerator Start ()    {        string path = "AssetBundles/cubewall.unity3d";        // AssetBundle ab2 = AssetBundle.LoadFromFile("AssetBundles/share.unity3d");        //AssetBundle ab= AssetBundle.LoadFromFile("AssetBundles/cubewall.unity3d");        // GameObject go = ab.LoadAsset<GameObject>("wall");        // Instantiate(go);        //Object[] objs = ab.LoadAllAssets();    //得到所有的模型        //foreach(Object o in objs)        //{        //    Instantiate(o);        //}        //1.第一种加载AB的方式LoadFromMemoryAsync(从内存中加载)        //AssetBundleCreateRequest request = AssetBundle.LoadFromMemoryAsync(File.ReadAllBytes(path));        //yield return request;        //AssetBundle ab= request.assetBundle;        //AssetBundle ab= AssetBundle.LoadFromMemory(File.ReadAllBytes(path));        //AssetBundle ab2 = AssetBundle.LoadFromMemory(File.ReadAllBytes("AssetBundles/share.unity3d"));        //2.第二种加载AB的方式LoadFromFileAsync        //AssetBundleCreateRequest request = AssetBundle.LoadFromFileAsync(path);        //yield return request;        //AssetBundle ab = request.assetBundle;        //3.第三种加载AB的方式 WWW        //while(Caching.ready==false)        //{        //    yield return null;        //}        ////file:// 或file:///都可以        ////WWW www = WWW.LoadFromCacheOrDownload(@"file:///E:\UnityProject\AssetBundleProject\AssetBundles\cubewall.unity3d", 1);        //WWW www = WWW.LoadFromCacheOrDownload(@"http://localhost/AssetBundles/cubewall.unity3d",1);        //yield return www;         //if(string.IsNullOrEmpty(www.error)==false)        //{        //    Debug.Log(www.error);        //    yield break;        //}        //AssetBundle ab = www.assetBundle;        //4.第四种加载方式UnityWebRequest        //string uri = @"file:///E:\UnityProject\AssetBundleProject\AssetBundles\cubewall.unity3d";        string uri = @"http://localhost/AssetBundles/cubewall.unity3d";        UnityWebRequest request = UnityWebRequest.GetAssetBundle(uri);        yield return request.Send();        //string uri2 = @"http://localhost/AssetBundles/share.unity3d";        //UnityWebRequest request2  = UnityWebRequest.GetAssetBundle(uri2);        //yield return request2.Send();        //DownloadHandlerAssetBundle.GetContent(request2);        AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request);        //AssetBundle ab = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle;                //使用里面的资源:(加载资源)        GameObject go = ab.LoadAsset<GameObject>("wall");        Instantiate(go);        AssetBundle manifestAB = AssetBundle.LoadFromFile("AssetBundles/AssetBundles");        AssetBundleManifest manifest = manifestAB.LoadAsset<AssetBundleManifest>("AssetBundleManifest");        string[] strs = manifest.GetAllDependencies("cubewall.unity3d");        foreach(string name in strs)        {            Debug.Log(name);            AssetBundle.LoadFromFile("AssetBundles/" + name);                   }    }// Update is called once per framevoid Update () {}}


原创粉丝点击