AssertBundle :https://docs.unity3d.com/Manual/AssetBundlesIntro.html
简言之就是,在开发时将一些较大的资源使用assertbundle技术压缩打包,并且放在服务器上面,通过MD5校验码和本地文件比对,将本地和服务器不同的文件下载下来,并且删除本地文件,这样就是资源热更新.通过assertbundle加载文件,使之可以在unity里面使用.

后缀名为manifest的文件存储的是当前文件的信息,以及依赖关系.
AssetBundle的压缩格式:LZMA格式,LZ4格式,不压缩 AssetBundle的标准(默认)压缩格式便是LZMA,LZMA是一种序列化流文件,包体积最小,高压缩比,会增加解压缩的时间. 由于LZ4的压缩比一般,因此经过压缩后的AssetBundle包体的体积较大,该算法基于chunk,LZ4格式的好处在于解压缩的时间相对要短。在打包的时候开启BuildAssetBundleOptions.ChunkBasedCompression即可。BuildAssetBundleOptions.UncompressedAssetBundle为不压缩
使用方式:
一:随游戏一同发布的AssetBundle(一般位于StreamingAssets文件夹中):在打AssetBundle包时,使用LZ4压缩格式进行打包(开启BuildAssetBundleOptions.ChunkBasedCompression即可)。在运行时需要加载AssetBundle对象时,使用LoadFromFile方法进行加载。这样做的好处是:即可以将AssetBundle文件压缩,又可以兼顾加载速度,且节约内存。
二:从服务端下载的AssetBundle:在打AssetBundle包时,使用默认的LZMA格式压缩,使用WWW.LoadFromCacheOrDownload方法下载并缓存AssetBundle包文件,这样做的好处是:获得了最大的压缩率,在下载过程中可以减少数据传输量。同时,在本地磁盘创建缓存之后,又可以兼顾之后的加载速度,且节约内存。
三:我们自己进行加密的AssetBundle:在打AssetBundle包时,使用LZ4压缩格式进行打包(开启BuildAssetBundleOptions.ChunkBasedCompression即可)。在运行时需要加载AssetBundle对象时,使用LoadFromMemory方法进行加载。(这也是从内存中使用流数据加载AssetBundle对象的仅有的使用场景。)
四:我们自己压缩的AssetBundle:我们自己也可以使用第三方库或工具对生成的AssetBundle包文件进行压缩,如果需要这样做,则我们最好不要再使用Unity3D对AssetBundle进行压缩,因此在打包时选择开启BuildAssetBundleOptions.UncompressedAssetBundle。在运行时需要加载AssetBundle对象时,使用LoadFromFileAsync方法进行异步加载。
五:对于需要常驻内存的Bundle文件来说,优先考虑减小内存占用,因此对于存放非Prefab资源(特别是纹理)的Bundle文件,可以考虑使用WWW.LoadFromCacheOrDownload或AssetBundle.LoadFromFile加载,从而避免WebStream常驻内存,而对于存放较多Prefab资源的Bundle,则考虑使用new WWW加载,因为这类Bundle用WWW.LoadFromCacheOrDownload加载时产生的SerializedFile可能会比new WWW产生的WebStream更大。
六:对于加载完后即卸载的Bundle文件,则分两种情况:优先考虑速度(加载场景时)和优先考虑流畅度(游戏进行时)。1)加载场景的情况下,需要注意的是避免WWW对象的逐个加载导致的CPU空闲,可以考虑使用加载速度较快的WWW.LoadFromCacheOrDownload或AssetBundle.LoadFromFile,但需要避免后续大量地进行Load资源的操作,引起IO开销(可以尝试直接LoadAll)。2) 游戏进行的情况下,则需要避免使用同步操作引起卡顿,因此可以考虑使用new WWW配合AssetBundle.LoadAssetAsync来进行平滑的资源加载,但需要注意的是,对于Shader、较大的Texture等资源,其初始化操作通常很耗时,容易引起卡顿,因此建议将这类资源在加载场景时进行预加载。
使用Resources.Unload(obj)/AssetBundle.Unload(bool )/WWW.Dispose()来进行卸载.其他方式尽量不要使用.


主要是用加载的API是 UnityWebRequest 和AssetBundle.LoadFromFile.
XLua: 属性和静态方法用 . 调用,txt文件必须是UTF-8格式的,不是这样的格式,有时候加载不出来.
using XLua;引用库 LuaEnv 相当于lua虚拟机 DoString(string chunk, string chunkName = "chunk", LuaTable env = null) 加载lua脚本 Dispose()销毁lua虚拟机;Tick定时清除Lua的未手动释放的LuaBase(比如,LuaTable, LuaFunction),以及其它一些事情。在update中调用;loader:就一个回调,其类型为delegate byte[] CustomLoader(ref string filepath),当一个文件被require时,这个loader会被回调,其参数是require的参数,如果该loader找到文件,可以将其读进内存,返回一个byte数组。如果需要支持调试的话,而filepath要设置成IDE能找到的路径(相对或者绝对都可以)LuaEnv的使用建议:全局就一个实例,并在Update中调用GC方法,完全不需要时调用Dispose.具体的请看xlua文档教程.
网友评论