AssetBundle 是 Unity3D 中的一种资源包,这种资源包可以是游戏内要用到的几乎所有资源,例如:模型、纹理、预设、场景等大部分文件更新,并且可以在运行时动态加载。值得注意是AssetBundle 是可以多个文件一起打包,打包的资源也可以做成预设后再进行打包,这样可以将预设上面附带的组件、纹理、子对象等一并打包,加载后直接实例化就能直接使用了。关于其中包含使用到的技巧,小编会和大家共同学习和活用。
Unity3D相关文档下载: AssetBundles-Browser:
https://github.com/Unity-Technologies/AssetBundles-Browser
Asset Bundle:
https://docs.unity3d.com/Manual/AssetBundlesIntro.html
首先,我们先进行 AssetBundle API的概述。
1、BuildAssetBundleOptions.None:使用 LZMA 算法压缩,压缩的包更小,但是加载时间更长。使用之前需要整体解压。一旦被解压,这个包会使用 LZ4 重新压缩。使用资源的时候不需要整体解压。在下载的时候可以使用 LZMA 算法,一旦它被下载了之后,它会使用 LZ4 算法保存到本地上。 2、BuildAssetBundleOptions.UncompressedAssetBundle:不压缩,包大,加载快。 3、BuildAssetBundleOptions.ChunkBasedCompression:使用 LZ4 压缩,压缩率没有 LZMA 高,但是我们可以加载指定资源而不用解压全部。注意使用 LZ4 压缩,可以获得可以跟不压缩想媲美的加载速度,而且比不压缩文件要小。建议使用 LZ4 压缩格式,弃用以前的压缩格式,LZ4 压缩支持分块压缩,虽然压缩比率不如 LZMA ,但是解压速度更快,而且加载某个特定资源不需要将整个 Asset Bundle 解压,不会到导致大量的内存占用。
其他附加说明: A、弃用 WWW 加载 AssetBundle 的方式,会占用 AssetBundle 包大小双倍以上的内存,导致内存峰值很高。使用 UnityWebRequest 替换 WWW 。LZ4格式,配合使用 AssetBundle.LoadFromFileAsync 和 UnityWebRequest 加载,最大占用内存就是 AB 解压后的内存,不会导致内存峰值。 B、尽量不要协程并发加载同一个 AssetBundle 包中的资源,早期的版本(大概Unity3D 5.5系列之前的版本)在Android平台发现会导致加载的资源材质或者贴图丢失,不过Unity3D新的版本应该会逐渐修复此bug。 C、不同平台资源格式是有差异的,特别是 Shader ,在Android、iOS 等其他平台的 Shader 是不能在Editor模式使用的。需要对应平台使用对应的资源,例如在 Android 平台下打包 AssetBundle ,然后使用 Android 平台的资源,在编辑器模式下运行测试,出现大量紫块的问题。如果你的操作系统是Window 平台,你应该打包 Window 平台的资源在 Editor 模式使用,如果操作系统是 Mac ,那么Editor模式下,你应该使用Mac平台的资源。如果非要在Editor模式下使用Android、iOS的资源,也可以在场景加载后,使用Shader.Find 加载Shader,替换场景中所有的 Shader 。
好吧,其实小编只是初步给大家纯理论的浅析,后续会和大家进入实战的学习中,同时也期待大家留言讨论。最后,再次感谢琳云科技一如既往的支持~~
450

被折叠的 条评论
为什么被折叠?



