相关文章推荐
玉树临风的楼房  ·  linux - Run bash ...·  1 年前    · 

什么是 AssetBundle

AssetBundle(简称AB包)是一个资源压缩包,可以包含模型、贴图、音频、预制体等。如在网络游戏中需要在运行时加载资源,而AssetBundle可以将资源构建成 AssetBundle 文件。

AssetBundle 提供了三种压缩格式

  • LZMA压缩(BuildAssetBundleOptions.None):unity中默认的压缩方式,优点是会将文件压缩的非常小,缺点是每次使用都需要将压缩的文件全部解压,非常耗费时间,可能会造成游戏的卡顿,不推荐在项目中使用。
  • 不压缩(BuildAssetBundleOptions.UncompressedAssetBundle):优点是需要加载资源时速度非常快,缺点是构建的 AssetBundle 资源文件会比较大。
  • LZ4压缩(BuildAssetBundleOptions.ChunkBasedCompression):是LZMA和不压缩之间的折中方案,构建的 AssetBundle 资源文件会略大于 LZMA 压缩,但是在加载资源时不需要将所有的资源都加载下来,所以速度会比 LZMA 快。建议项目中使用它。

AssetBundle使用

如图中所示选择需要构建 AssetBundle 的资源,在下方输入资源名称和后缀。
在这里插入图片描述

代码构建 AssetBundle

[MenuItem("Assets/Build AssetBundles")]
    static void BuildAllAssetBundles()
        string dir = "Assets/StreamingAssets";
        if (Directory.Exists(dir) == false)
            Directory.CreateDirectory(dir);
        //BuildTarget.StandaloneWindows64 选择构建平台
        //BuildPipeline.BuildAssetBundles(dir, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64); //LZMA
        BuildPipeline.BuildAssetBundles(dir, BuildAssetBundleOptions.ChunkBasedCompression, BuildTarget.StandaloneWindows64); //LZ4
        //BuildPipeline.BuildAssetBundles(dir, BuildAssetBundleOptions.UncompressedAssetBundle, BuildTarget.StandaloneWindows64); //不压缩        

AssetBundle 加载

我们可以使用四种不同的方法来加载 AssetBundle。

  • AssetBundle.LoadFromMemoryAsync
  • AssetBundle.LoadFromFile
  • WWW.LoadfromCacheOrDownload
  • UnityWebRequestAssetBundle 和 DownloadHandlerAssetBundle

AssetBundle.LoadFromMemoryAsync

从内存区域异步创建 AssetBundle。

 /// <summary>
    /// 从本地异步加载AssetBundle资源
    /// </summary>
    /// <param name="path">路径</param>
    /// <returns></returns>
    IEnumerator LoadFromMemoryAsync(string path)
        AssetBundleCreateRequest createRequest = AssetBundle.LoadFromMemoryAsync(File.ReadAllBytes(path));
        yield return createRequest;
        AssetBundle bundle = createRequest.assetBundle;
        var prefab = bundle.LoadAsset<GameObject>("bullet");
        Instantiate(prefab);

AssetBundle.LoadFromMemory由AssetBundle.LoadFromMemoryAsync变化而来,与 LoadFromMemoryAsync 相比,该版本是同步的,将等待 AssetBundle 对象创建完毕才返回。

		AssetBundle bundle = AssetBundle.LoadFromMemory(File.ReadAllBytes(ABPath));
        var prefab = bundle.LoadAsset<GameObject>("bullet");
        Instantiate(prefab);

AssetBundle.LoadFromFile

从磁盘上的文件同步加载 AssetBundle。
该函数支持任意压缩类型的捆绑包。 如果是 lzma 压缩,则将数据解压缩到内存。可以从磁盘直接读取未压缩和使用块压缩的捆绑包。

与 LoadFromFileAsync 相比,该版本是同步的,将等待 AssetBundle 对象创建完毕才返回。

这是加载 AssetBundle 的最快方法。

		AssetBundle ab = AssetBundle.LoadFromFile(ABPath);
        var go = ab.LoadAsset<GameObject>("bullet");
        Instantiate(go);

LoadFromFileAsync AssetBundle 的异步创建请求。加载后使用 assetBundle 属性获取 AssetBundle。
从磁盘上的文件异步加载 AssetBundle。

该函数支持任意压缩类型的捆绑包。 如果是 lzma 压缩,则将数据解压缩到内存。可以从磁盘直接读取未压缩和使用块压缩的捆绑包。

这是加载 AssetBundle 的最快方法。

IEnumerator LoadFromFileASync(string path)
        AssetBundleCreateRequest createRequest = AssetBundle.LoadFromFileAsync(path);
        yield return createRequest;
        AssetBundle bundle = createRequest.assetBundle;
        if (bundle == null)
            Debug.Log("Failed to load AssetBundle!");
            yield break;
        var parefab = bundle.LoadAsset<GameObject>("bullet");
        Instantiate(parefab);

WWW.LoadfromCacheOrDownload(已弃用)

本API已弃用,建议使用 UnityWebRequest。
从缓存中加载具有指定版本号的 AssetBundle。如果当前未缓存该 AssetBundle,则自动下载该 AssetBundle 并将其存储在缓存中,以便将来从本地存储检索。

 IEnumerator LoadFromCacheOrDownload()
        //Caching.ready 如果缓存系统已准备就绪,返回 true。
        while (!Caching.ready)
            yield return null;
        //C:\Users\mfbf\AppData\LocalLow\Unity WWW缓存地址
        using (var www = WWW.LoadFromCacheOrDownload("http://127.0.0.1:8080/PC/attack/bullet.lian", 2))
            yield return www;
            if (!string.IsNullOrEmpty(www.error))
                Debug.Log(www.error);
                yield return null;
            var bundle = www.assetBundle;
            var parefab = bundle.LoadAsset<GameObject>("bullet");
            Instantiate(parefab);

UnityWebRequestAssetBundle 和 DownloadHandlerAssetBundle

UnityWebRequestAssetBundle 此方法将 DownloadHandlerAssetBundle 附加到 UnityWebRequest。

DownloadHandlerAssetBundle.GetContent(UnityWebRequest) 作为参数。GetContent 方法将返回你的 AssetBundle 对象。

  IEnumerator WEB(string url)
        UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(url,3,0);
        //此方法将返回 WebRequestAsyncOperation 对象。在协程内部生成 WebRequestAsyncOperation 将导致协程暂停,
        //直到 UnityWebRequest 遇到系统错误或结束通信为止。
        yield return  request.SendWebRequest();
        //如果加载失败
        if (request.result != UnityWebRequest.Result.Success)
            Debug.Log(request.error);
            yield break;
        //返回下载的 AssetBundle 或 null。
        AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(request);
        var parefab = bundle.LoadAsset<GameObject>("bullet");
        Instantiate(parefab);
                    Unity AssetBundleAssetBundle.LoadFromMemoryAsyncAssetBundle.LoadFromFileWWW.LoadfromCacheOrDownload(已弃用)UnityWebRequestAssetBundle 和 DownloadHandlerAssetBundle
1.1 AssetBundle介绍
AssetBundle是将资源使用Unity提供的一种用于存储资源的压缩格式打包后的集合,它可以存储任何一种Unity可以识别的资源,如模型,纹理图,音频,场景等资源。也可以加载开发者自定义的二进制文件。他们的文件类型是.assetbundle或者
/.unity3d,他们先前被设计好,很容易就下载到我们的游戏或者场景当中。
AssetBundle(简称AB包)是一个资源压缩包,包含模型、贴图、预制体、声音、甚至整个场景,可以在游戏运行
				
本文分享Unity中的资源管理-AssetBundle(1) 在上一篇文章中, 我们简单介绍了Unity中的资源和基本的使用, 今天我们详细介绍下使用AssetBundle来管理资源. AssetBundle介绍 AssetBundle, 下面简称Ab, 本身的概念十分的简单, 顾名思义, 就是一系列资材打成的包而已. 相比Resources文件夹来组织资源的方式, Ab将使用某种方式将资源按照"包"的形式组织. 我们可以将某个文件夹内的所有资源组织为一个Ab, 也可以将某类资源组织为一个Ab, 还可以将某
AssetBundle AssetBundle(阿赛特邦豆)是Unity官方推荐的资源加载方式,网上对AssetBundle的介绍有很多,且在了解了Unity对资源的加载机制后,其本身没有什么特别难以理解的地方了,因此在这不过多介绍,仅挑选几个关键点进行阐述。 AssetBundle的生成 生成AssetBundle有很多种方式,在此仅简单说一下比较常用的方式,使用BuildPipeline...
减小安装包的大小,资源可以在进入游戏时候,网络下载。 热更资源,方便修复线上资源问题引起的Bug,或新增加游戏内容。 AssetBundle分为两种类型:场景AssetBundle & 非场景AssetBundle。 2.AssetBundle结构 2.1 As... Unity资源管理 在Unity中,一般来说,资源加载方式主要分为Resources加载和AssetBundle加载。 Unity有个特殊文件夹Resources,放在这个文件夹下的资源可以通过Resources.Load()来直接加载。即Resources加载资源方式。 当获得AssetBundle之后,也可以调用AssetBundle对应的API来加载资源。 什么是AB包 AB包全名AssetBundle(资源包)。是一种Unity提供的用于存放资源的包。通过将资源分布在不
StreamingAssets下面的文件读取有一些规则还是得注意一下,有点记忆偏差就会出事。 1. StreamingAssets目录直接用Application.streamingAssetsPath获取就行; 2. AssetBundle.LoadFromFile可以读取StreamingAssets下的AssetBundle; 3. Windows &amp; ios平台,用C# Fi...
AssetBundleunity提供的一个特定平台的归档文件(archive file),可以在运行时加载。 AssetBundle包可以明确的表示互相之间的依赖关系,如a包中的材质引用了b包中的贴图。 为了在网络上高效的传输,AssetBundle可以更具实际需求选择内置的压缩算法。 AssetBundle对下载DLC(扩展包)很有用,可以减少安装包大小,优化终端平台的资源加载,减少运行时的内存压力。 总结:游戏资源更新,减少游戏安装包大小,优化资源加载。 AssetBundle策略
Asset Bundle的作用: 1.AssetBundle是一个压缩包包含模型、贴图、预制体、声音、甚至整个场景,可以在游戏运行的时候被加载; 2.AssetBundle自身保存着互相的依赖关系; 3.压缩包可以使用LZMA和LZ4压缩算法,减少包大小,更快的进行网络传输; 4.把一些可以下载内容放在AssetBundle里面,可以减少安装包的大小;什么是AssetBundle: 可以归为两点: 1,它是一个存在于硬盘上的文件。可以称之为压缩包。这个压缩包可以认为是一个文件夹,里面包含了多个文件。这些文件
### 回答1: Unity AssetBundle Browser是Unity引擎的一款插件,它可以帮助游戏开发者在编辑器内浏览和管理AssetBundle资源。AssetBundle资源是游戏制作过程中必需的一种资源,它可以将一些预制件、贴图、声音和代码等打包成二进制文件,并在运行时通过代码加载到游戏中,从而实现动态加载资源和减少加载时间的效果。 Unity AssetBundle Browser插件提供了一个可视化的资源管理界面,用户可以通过它对资源进行打包、解包、浏览、删除等操作。在使用AssetBundle资源时,由于资源文件的二进制格式与编辑器内资源格式不同,开发者需要将资源文件打包成AssetBundle进行加载。Unity AssetBundle Browser将这个过程简化了,用户只需选择需要打包的资源,设置相关参数,并点击打包按钮,就可以轻松地创建AssetBundle文件,并将其加载到游戏中。 此外,Unity AssetBundle Browser还支持实时预览AssetBundle资源,开发者可以通过它快速地浏览预制件、纹理、材质球等资源,从而提高开发效率。总的来说,Unity AssetBundle Browser是一款十分实用的插件,它为开发者提供了一种便捷的方式去管理和使用AssetBundle资源,使游戏制作变得更加高效和便捷。 ### 回答2: Unity AssetBundle Browser是一个Unity扩展工具,用于在IDE中浏览和管理AssetBundleAssetBundle是一种Unity资源包,可以使开发者轻松创建和管理资源,如纹理、声音和模型等。 Unity AssetBundle Browser可以让开发者直观地查看AssetBundle文件的内容,包括资源列表、依赖关系和预览功能。此外,它还提供了打包、解包、压缩和解压缩AssetBundle文件的功能,使开发者可以更灵活地使用AssetBundle,以满足项目需求。 使用Unity AssetBundle Browser,开发者可以快速地浏览和编辑AssetBundle,节省了大量的时间和精力。它还可以帮助开发者更好地理解AssetBundle的工作原理,为开发者深入学习Unity提供了一个重要的工具。 总之,Unity AssetBundle Browser是一个非常有用的工具,可以帮助Unity开发者更高效地管理和使用AssetBundle,提高项目开发效率和质量。 ### 回答3: Unity AssetBundle Browser是Unity游戏引擎中的一个工具,可以用于浏览和导出AssetBundle资源包。AssetBundle是一种Unity的资源打包方式,可以将游戏中的资源打包成一个文件,方便后续的版本管理和部署。 使用AssetBundle Browser可以很方便地管理和处理AssetBundle资源包,包括在游戏中动态加载和卸载资源,减小游戏的内存占用和优化游戏性能。通过AssetBundle Browser,我们可以查看和编辑资源包中的资源,例如模型、贴图、音频等,并提供了一套完整的编辑工具,支持资源导入、复制、删改等操作。 在游戏开发中,AssetBundle Browser可以用于优化游戏的资源处理方式,提高游戏性能,同时也可以帮助开发者更加高效地管理和打包游戏资源。值得注意的是,AssetBundle Browser只适用于Unity游戏引擎,需要Unity开发环境的支持。因此,开发者在使用AssetBundle Browser时,需要提前了解Unity的相关知识和技术,否则会影响到开发效率和质量。