如何实现 AssetBundle 的依赖部分从 Resource 获取
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何实现 AssetBundle 的依赖部分从 Resource 获取相关的知识,希望对你有一定的参考价值。
参考技术A Unity会下载Assetbundle本地中,它的工作原理是先通过(版本号和下载地址)先在本地去找看有没有这个Assetbundle,如果有直接返回对象,如果没有的话,在根据这个下载地址重新从服务器或者本地下载。这里版本号起到了很重要的作用,举个例子,同一下载地址版本号为1的时候已经下载到本地,此时将版本号的参数改成2 那么它又会重新下载,如果还保持版本号为1那么它会从本地读取,因为本地已经有版本号为1的这个Assetbundle了。你不用担心你的资源本地下载过多,也不用自己手动删除他们,这一切的一切Unity会帮我们自动完成,它会自动删除掉下载后最不常用的Assetbundle ,如果下次需要使用的话只要提供下载地址和版本后它会重新下载。我们在聊聊Assetbundle 中的脚本,在移动平台下Assetbundle里面放的脚本是不会被执行的,还记得我们打包前给两个Prefab挂上了脚本吗?在手机上将Assetbundle下载到本地后,加载进游戏中Prefab会自动在本地找它身上挂着的脚本,他是根据脚本的名来寻找,如果本地有这条脚本的话,Prefab会把这个脚本重新绑定在自身,并且会把打包前的参数传递进来。如果本地没有,身上挂的条脚本永远都不会被执行。
在Prefab打包前,我在编辑器上给脚本中的变量 name 赋了不同值,当Prefab重新载入游戏的时候,它身上脚本的参数也会重新输出。
如果你的Assetbundle中的Prefab上引用的对象,那么这样做就会出错了,你需要设定他们的依赖关系。或者运行时通过脚本动态的载入对象。 参考技术B Unity会下载Assetbundle本地中,它的工作原理是先通过(版本号和下载地址)先在本地去找看有没有这个Assetbundle,如果有直接返回对象,如果没有的话,在根据这个下载地址重新从服务器或者本地下载。这里版本号起到了很重要的作用,
Assetbundle包的依赖关系与加载方式的深入
两种压缩方式:Lzma (默认的), Lz4
四种加载方法:
1,从内存中加载:LoadfromMemory()内存
2,从本地加载:LoadFromFile
3,从本地或服务器加载www(下面会提到)
4,从服务器端加载unityWebRequest
加载依赖资源包
1,获得总的依赖配置(streamingAssets)
2,根据名称找到目标加载资源的所有依赖
3,加载所有的依赖资源
加Lua脚本Lua格式改为bytes后缀文件
资源路径:
Application.datapath;
Application.streamingAssetsPath(只读不可写)
Application.persistentDataPats(特殊 可读可写 运行时!)
Application.temporarycachePath
1,Windows.manifest(总的配置文件)
依赖关系:一个东西要完整的显示出来,必须要另外一个东西。
2,单个Assetbundle包配置文件:里面记录的是
(1)单个Assetbundle里面的资源
(2)记录单个Asssetbundle的依赖关系
bundle包的依赖关系加载:
(哈哈哈 机智如我 上图是举例 )
第一个的:
加载A需要做些什么事情那?
1,加载B和C
2,加载A
卸载A?
1,先卸载B,C依赖关系
2,判断B,C是否有依赖 B,C卸载
第二个:
加载A?
1,判断依赖关系A判断B,C |B,C判断D
卸载B?
1,只能卸载B,D关系
卸载C?
1,卸载C,D关系
2,卸载D
插个小话题
引用计数:
Gc机制也是存在引用计数的关系: 被谁引用(List<>) 引用的谁(List<>)
下面是bundle包三块内存存放与加载方式
1,bundle包放在网络用WWW加载然后加载到本地,bundle包在本地用Assetbundle.LoadFromFile方法加载(内存镜像)
释放内存:Assetbundle.Unload(false)
2,解压Assetbundle:Assetbundle.Load()将镜像里的zip包解压出来
释放内存:Resource.Unloadasset(obj)只能卸载obj类型 shader 网格 材质 贴图都不能卸载 而Resource.Unloadunusedasset()用这个API释放 shader 网格 材质 贴图
3,GameObjece.instance使用解压出来的资释
释放内存:Destroy()
以上是关于如何实现 AssetBundle 的依赖部分从 Resource 获取的主要内容,如果未能解决你的问题,请参考以下文章
Unity AssetBundle共享资源打包/依赖资源打包
UnityAssetBundle和AssetBundle Manager的使用和介绍(流程和依赖关系)
UnityAssetBundle和AssetBundle Manager的使用和介绍(流程和依赖关系)