正所谓:自古套路得人心,学会AssetBundle开发,成就更精简游戏包。
- 欢迎关注公众号:雷潮课堂
###AssetBundle打包
一、课程内容
1-1游戏套路
1-2什么是AssetBundle
1-3AssetBundle的作用
二、使用AssetBundle打包
2-1版本5.0前后打包
2-2版本5.0前后解压
2-3手动打包2020版本
三、加载AssetBundle
3-1加载本地AssetBundle(模型,图片)
3-2网络加载AssetBundle(网络加载(UnityWebRequest))
3-3 AssetBundle打包路径问题(不同平台Android、iOS、PC)
四、打包工具的开发
4-1 批量命名打包
4-2 官方Demo案例介绍
1-1、游戏套路
我们经常下载一些游戏App,如果Wifi情况下,App大小就无关紧要。但是如果是流量呢?一看到App的大小,直接就不下了。但是游戏公司怎么会不知道?所以采用热更新,或者直接下载完毕后,再进行加载的行为进行笼络用户。当然这也是产品要求的结果。这里不说游戏的好玩,只讨论这种套路是什么手段进行的。
1-2、什么是AssetBundle?
资源需要打包发布,所以Unity提供的打包策略,也就是AssetBundle。这个的方式有自己的压缩格式(LZMA\压缩),其实就是精简你的资源。简称AB,几乎所有的资源都可以打包程AB,AB可以存放Unity可识别的任何资源类型,具体取决于文件的扩展名。例如:导入的文件后缀为“.byte”,Unity会将这些文件作为文本(TextAssets)导入。导入的文件后缀为“.spine”,Unity会将这些文件作为动画导入。
可以通过官方的Demo来进行学习:Unity5 AssetBundle Demo
1-3、AssetBundle的作用
由于我们要将模型资源放在远程的服务器端,但如果直接放fbx模型是不可以加载的,所以我们可以将fbx做成预设或者是直接将其打包成assetbundle格式的,然后通过www来加载获取。
如果将上述流程反过来,就是加载服务器数据包
2、使用AssetBundle
在打包的时候,可能会重复打包,造成资源包很大。可以将资源拆分细致后,独立打包。
比如:一个模型的网格Mesh,材质Material,贴图Texture.
2-1 Unity5.0之前旧版AB打包
本先扫描所有要打包的资源,然后AssetDatabase.GetDespendencie获得所有的依赖,自己记录起来,由于怕资源名称相同,所以使用AssetDatabase。AssetPathToGUID获得资源的唯一id,然后存起来。
获得所有依赖关系之后,再使用BuildPipeline.PushAssetDependencies和BuildPipeline.PopAssetDependencies按照层级和顺序来打包。这样打出来的资源就完全保留了依赖关系,文件会被拆散,不会重复打包。
2-2 Unity5.0之后,AB打包
BulidPipeline.BuildAssetBundles(outputPath,BuildAssetBundleOptions,BuildTarget)
BuildAssetBundleOptions.None:默认构建AssetBundle的方式。使用LZMA算法压缩,此算法压缩包小,但是加载时间长,而且使用之前必须要整体解压。解压以后,这个包又会使用LZ4算法重新压缩,这样这种包就不要对其整体解压了。(也就是第一次解压很慢,之后就变快了。
BuildAssetBundleOptions.UncompressedAssetBundle:不压缩数据,包大,但是加载很快。
BuildAssetBundleOptions.ChunkBaseCompression:使用LZ4算法压缩,压缩率没有LZMA高,但是加载资源不必整体解压。这种方法中规中矩,我认为比较常用。
以上是常用的三种,接下来会对你其余的几种做简单的介绍
BuildAssetBundleOptions.D