AssetBundle相关

AssetBundle相关====>AssetBundle打包:设置好AssetBundle包名后,利用BuildPipeline.BuildAssetBundles("Path");进行打包。该函数有三参和四参的,三参如下:    outputPath : 导出路径  BuildAssetBundleOptions  : 导出选项枚举,内容在后面。 其中包含:是否压缩,是否使用块压缩即LZ4压缩等 BuildTa…

大家好,又见面了,我是你们的朋友全栈君。

====>AssetBundle打包:设置好AssetBundle包名后,利用BuildPipeline.BuildAssetBundles (“Path”);进行打包。

该函数有三参和四参的,三参如下:

    outputPath : 导出路径 
 BuildAssetBundleOptions  : 导出选项枚举,内容在后面。 其中包含:是否压缩,是否使用块压缩即LZ4压缩等
 BuildTarget  : 导出平台枚举

        如果第二个参数选择None,则默认是选择LZMA算法压缩。

        LZMA:压缩出来的包更小,故加载时间长但是需要整体解压(比如包中有ABC三个资源,我只需用A,但BC也会被解压出来)

        LZ4:会对ABC资源分别进行压缩(块压缩),所以如果只使用A,那么BC不会被解压出来。速度快

====>下载AssetBundle:下载AB包api

            有四大种(从内存、本地、WWW、UnityWebRequest),其中LoadFromFile和LoadFromMemory都有其异步方法。而3,4推荐使用4。3是如果当前没有下载过,就从服务器下载,存到本地的缓存Catch中。如果下载过就直接从本地Catch中加载。

            同步加载传递参数是路径,Async的传递byte字节数组,www传递url和版本号(或者校验码等)    

            www传递参数url,版本号。

            AssetBundle相关

            法①:AssetBundle.LoadFromFile(“abPath + pathName”)及其

            法②:异步方法AssetBundle.LoadFromFileAsync  协程实现

                        static IEnumerator LoadAsyncCoroutine(string path){

                                 AssetBundleCreateRequest abcr = AssetBundle.LoadFromFileAsync(path) ;

                                 yield return abcr;

                                AssetBundle ab = abcr.assetBundle;

                         }

                法③、④:LoadFromMemoryAsync  ,LoadFromMemory(参数也是字节数组)

                                        AssetBundle相关

                法⑤:www异步加载  yield return www;www.assetBundle;即可

                            AssetBundle相关

                法⑥:UnityWebRequest方法,用来代替WWW加载。

                            AssetBundle相关

====>加载AssetBundle包中的资源

                     AssetBundle相关

               法①: Object  AssetBundle.LoadAsset(string assetName);

              法②: AssetBundleRequest AssetBundle.LoadAssetAsync(string assetName); 返回值是AssetBundleRequest类型 abr ,abr.assetBundle即可。

                其他方法:LoadAllAsset及其异步Async方法

=================================

依赖加载处理,解决冗余:依赖加载

            ①获取包含总Manifest文件的AB包(与目录名相同)

                    AssetBundle manifestAB = AssetBundle.LoadFromFile(outputPath); // 加载总ManifestAssetBundle

            ②得到Manifest文件

                    AssetBundleManifest manifest = (AssetBundleManifest)manifestAB.LoadAsset(“AssetBundleManifest”);

            ③获取当前资源所需的所有依赖项

                    string[] dependencies = manifest.GetAllDependencies(“sprite1234.ab”); // 结果 sprite1.ab

            ④遍历加载出所有依赖包

                    foreach(string name in dependencies){

                AssetBundle.LoadFromFile(“path+name”);

            }

             ⑤释放资源包

                    manifestAB.Unload(false); // 释放AssetBundle

========释放资源

           AssetBundle.Unload(false):卸载当前不被使用的资源,可能会造成内存没法被卸载。比如:

            一个包AB中有一个m材质被Person1使用着,那么调用完该方法后,AB包被卸载了,但是Person1上的m没被卸载,但是和AB包间的引用关系断开了。这时,即使我重新加载出了AB包,它也和Person1之间没引用关系了,这时如果m不被Person1使用了,那么m就没有办法被卸载了。这时只能通过Resources.UnloadUnusedAsset()卸载了

        AssetBundle.Unload(true):卸载AB包以及所有资源。使用:要确保当前没有物体在使用里边的资源了,一般在关卡、场景切换时

        AssetBundle相关


                    

        释放资源

        注意:如果不释放www,则AssetBundle.Unload(false)的时候,是不能释放掉ab包的,因为内存会保存有一份ab的引用。

        & www对象:www加载完毕后调用www.dispose()或www = null

        & AssetBundle对象:    

            对于使用完毕的AB,调用AssetBundle.Unload(false)或true释放

            false:卸载AB对象时,保留内存中已加载的资源 ture:卸载AB对象时,同时卸载内存中已加载的资源(不建议)

        & 对于资源使用完毕的,调用Resources.UnloadAsset()

        & 不再使用的GameObject直接Destroy即可

        —-

        * Prefab:DestroyImmediate卸载

        * 非Prefab:Resources.UnloadAsset()、Resources.UnloadUnuesedAsset()、AssetBundle.Unload(true)

============================================================================================

AssetBundle分组策略:

                    AssetBundle相关

AssetBundle相关

        解释:1、不经常更新的和经常更新分离:如果不分离比如A、B都是100M,本来只有A需要更新,这时因为它们是同一个包,那么用户需要下载更新200M。

=========================AssetBundle查看工具(内含可查看包大小、名字、引用资源、包含资源等+打包功能等):AssetBundle Browser tool

        AssetBundle相关

AssetBundle相关

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148676.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 秒懂mysql中的group by用法

    秒懂mysql中的group by用法文章转载自:https://blog.csdn.net/u014717572/article/details/80687042先来看下表1,表名为test:执行如下SQL语句:SELECTnameFROMtestGROUPBYname你应该很容易知道运行的结果,没错,就是下表2:可是为了能够更好的理解“groupby”多个列“和”聚合函数“的应用,我建议在思考的过程中…

    2022年5月26日
  • 拉链表实现及使用

    拉链表实现及使用一、概念历史拉链表,就是记录一个事务从开始一直到当前状态的所有变化的信息,拉链表可以避免按每一天存储所有记录造成的海量存储问题,同时也是处理缓慢变化数据的一种常见方式。假设企业拥有1000万的会员信息,每天有20万的会员资料变更,我们需要记录所有会议的历史变化记录,并至少保留两年,该怎么办?储存两年就是2x365x1000万=7300000000(70亿),如果储存…

    2022年10月16日
  • Java的8个Java日志工具[通俗易懂]

    摘要:本文要来分享一些Java程序员最常用的Java日志框架组件。日志工具log4j–最受欢迎的Java日志组件Log4j是一款基于Java的开源日志组件,Log4j功能非常强大,我们可以将日志信息输出到控制台、文件、用户界面,也可以输出到操作系统的事件记录器和一些系统常驻进程。更值得一提的是,Log4j可以允许你非常便捷地自定义日志格式和日志等级,可以帮助开发人员全方位地掌控…

    2022年4月9日
  • websocket 粘包问题_websocket数据过大

    websocket 粘包问题_websocket数据过大websocket 底层使用的tcp 协议。 当一次发送数据过长时,tcp 会把数据封成多个包发送;同样当数据过短时,会把数据合并成一个包发送,这种现象就是粘包。粘包的情况也有可能是接收端造成的。[参考]( http://m.blog.csdn.net/duotemplar/article/details/73193038).tcp协议相关的知识百度之。 粘包出现必然对应拆包处理。处理

    2022年8月11日
  • 一维卷积神经网络案例_matlab 卷积神经网络

    一维卷积神经网络案例_matlab 卷积神经网络基于一维卷积神经网络对机械振动信号进行分类并加以预测*使用一维卷积神经网络训练振动信号进行二分类2020年7月16日,一学期没等到开学,然而又放假了。总览CSDN中大多数卷积神经网络都是对二维图片进行分类的,而图片也都是常见的猫狗分类,minst手写数字分类。一维卷积神经网络的使用非常少见,有也是IDMB情感分类,和鸢尾花分类的。作者研究生就读于河北一所双飞,全国排名270多,哈哈哈,不吹不黑。在网上翻来翻去找不到一篇可以利用的代码去研究我的机械故障诊断,后来在无奈下到某宝搜寻到一段代码,可以利用

    2022年9月22日
  • spring boot之端口设置和contextpath的配置[通俗易懂]

    spring boot之端口设置和contextpath的配置[通俗易懂]端口设置Springboot默认端口是8080,如果想要进行更改的话,只需要修改applicatoin.properties文件,在配置文件中加入:1server.port=9090常用配置:1234567891011121314151617

    2022年9月2日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号