栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

Unity资源加载简析(二)AssetsBundle

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Unity资源加载简析(二)AssetsBundle

什么是AssetsBundle

1,它是一个存在于硬盘上的文件。可以称之为压缩包。这个压缩包可以认为是一个文件夹,里面包含了多个文件。这些文件可以分为两类:serialized file(序列化文件) 和 resource files(源文件)。
serialized file:资源被打碎放在一个对象中,最后统一被写进一个单独的文件,通常主观上不可见的。
resource files:某些二进制资源(图片、声音)被单独保存,方便快速加载。
2,一个AssetBundle对象,我们可以通过代码从一个特定的压缩包加载出来的对象。这个对象包含了所有我们当初添加到这个压缩包里面的内容,我们可以通过这个对象加载出来使用。

AssetsBundle的作用和意义

1,AssetBundle是一个压缩包包含模型、贴图、预制体、声音、甚至整个场景,可以在游戏运行的时候被加载;
2,AssetBundle自身保存着互相的依赖关系;
3,压缩包可以使用LZMA和LZ4压缩算法,减少包大小,更快的进行网络传输;
4,把一些可以下载内容放在AssetBundle里面,可以减少安装包的大小;

使用步骤 1.构建AssetsBundle包

代码如下(示例):

  [MenuItem("Tools/CreatAssetBundle for Win")]
    static void CreatPCAssetBundleForwINDOWS()
    {
        string path = "Assets/StreamingAssets";
        if (!Directory.Exists(path))
        {
            Directory.CreateDirectory(path);
        }
        BuildPipeline.BuildAssetBundles(path, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
    }

这时所选目标就会构建AssetsBundle文件到StreamingAssets中。

2.读取数据

读取方式1:异步加载
代码如下(示例):

  IEnumerator LoadABPackage1(string path)
    {
        Vector3 vector3 = new Vector3(0, 0, 1);
        AssetBundleCreateRequest request = AssetBundle.LoadFromMemoryAsync(File.ReadAllBytes(path+ "object"));
        yield return request;
        ab = request.assetBundle;
        Object cube = ab.LoadAsset("Cube.prefab");
        Instantiate(cube);
    }

读取方式2:同步加载
代码如下(示例):

 void LoadABPackage2()
    {
        ab = AssetBundle.LoadFromMemory(File.ReadAllBytes(_abPath + "cube.unity3d.assetbundle"));
        Object cube = ab.LoadAsset("Cube.prefab");
        Instantiate(cube);
    }

读取方式3:只能加载本地包(异步)
代码如下(示例):

 IEnumerator LoadABPackage3(string path)
    {
        AssetBundleCreateRequest request = AssetBundle.LoadFromFileAsync(path + "cube.unity3d.assetbundle");

        yield return request;

        ab = request.assetBundle;
        Object cube = ab.LoadAsset("Cube.prefab");
        Instantiate(cube);
    }

读取方式4:只能加载本地包(同步)
代码如下(示例):

 void LoadABPackage4(string path)
    {
        ab = AssetBundle.LoadFromFile(path + "cube.unity3d.assetbundle");
        Object cube = ab.LoadAsset("Cube.prefab");
        Instantiate(cube);
    }

读取方式5:WWW加载(已过时)
代码如下(示例):

 IEnumerator LoadABPackage5(string path)
    {
        WWW www = WWW.LoadFromCacheOrDownload(path + "cube.unity3d.assetbundle", 1);
        yield return www;
        if (!string.IsNullOrEmpty(www.error))
        {
            Debug.Log(www.error);
            yield break;
        }
        ab = www.assetBundle;
        Object cube = ab.LoadAsset("Cube.prefab");
        Instantiate(cube);
    }

**读取方式6:UnityWebRequest **
代码如下(示例):

 IEnumerator LoadABPackage6(string path)
    {
        UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(path + "cube.unity3d.assetbundle");
        yield return request.Send();
        ab = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle;
        Object cube = ab.LoadAsset("Cube.prefab");
        Instantiate(cube);
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/902190.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号