欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

unity5.X之后AssetBundle的打包和加载使用

程序员文章站 2022-05-23 11:07:39
...

1.Asset Bundle的打包

和老版本不同的是打包过程简化,打包代码只有下面这一句,但是资源包的名字及后缀名的设置在编辑器的inspector面板底部进行设置unity5.X之后AssetBundle的打包和加载使用

[MenuItem("Assets/Build AssetBundles")]
    static void BuildAllAssetBundles()
    {
        string dir = "AssetBundles";
        if( Directory.Exists(dir)==false)
        {
            Directory.CreateDirectory(dir);
        }
        BuildPipeline.BuildAssetBundles(dir, BuildAssetBundleOptions.UncompressedAssetBundle, BuildTarget.StandaloneWindows64);
    }

2.Asset Bundle的使用

string path = "AssetBundles/cubewall.unity3d";//资源包存放全路径

第一种加载AB的方式 LoadFromMemoryAsync

本地加载或者通过别的网络请求加载的二进制文件可以直接用   LoadFromMermory进行读取,有异步加载和同步加载两个函数,视情况使用

 AssetBundleCreateRequest request = AssetBundle.LoadFromMemoryAsync(File.ReadAllBytes(path));
        yield return request;
        AssetBundle ab = request.assetBundle;
        AssetBundle ab = AssetBundle.LoadFromMemory(File.ReadAllBytes(path));

第二种加载AB的方式LoadFromFile

只能通过本地路径加载
        AssetBundleCreateRequest request = AssetBundle.LoadFromFileAsync(path);
        yield return request;
        AssetBundle ab = request.assetBundle;

第三种加载AB的方WWW

老版本的加载方式,可以加载本地资源和远程资源。新老版本都可以使用,但是新版本有新的加载推荐

UnityWebRequest

        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;

第四种加载AB的方式UnityWebRequest

新的加载方式,官方推荐的新版网络加载
        string uri = @"http://localhost/AssetBundles/cubewall.unity3d";
        UnityWebRequest request = UnityWebRequest.GetAssetBundle(uri);
        yield return request.Send();
        //AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request);
        AssetBundle ab = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle;

3.新版加载与老版的最大区别

unity5.x之后打包的资源包都有一个资源依赖文件,加载的时候可以根据以来文件进行依赖资源加载,再进行资源加载。

        AssetBundle manifestAB =  AssetBundle.LoadFromFile("AssetBundles/AssetBundles");
        AssetBundleManifest manifest = manifestAB.LoadAsset<AssetBundleManifest>("AssetBundleManifest");

mainfest 就是资源依赖文件

 string[] strs =  manifest.GetAllDependencies("cubewall.unity3d");
        foreach (string name in strs)
        {
            print(name);
            AssetBundle.LoadFromFile("AssetBundles/" + name);
        }

strs是依赖资源,然后加载出来依赖资源,最后进行使用。

工程资源包:AssetBundle打包和加载


相关标签: unity3d