本篇主要是分享unity Assetbundle的打包处理。
目录
打包接口
BuildPipeline.BuildAssetBundles(folder, BuildAssetBundleOptions.UncompressedAssetBundle, platform);
打包AssetBundles主要是通过Unity Editor提供的BuildPipeline.BuildAssetBundles这个接口来完成打包。
folder就是打包好之后的输出路径,platform根据要输出的平台选择即可。
BuildAssetBundleOptions里unity提供了一些配置可以帮助我们快速处理一些需求比如压缩等。这个在unity手册里有很详细的解释。
这里选择不压缩主要是为了后续自己做压缩和加载方案。
整体设计

这里打包分成了四个步骤。
其中拷贝压缩后的StreamingAssets是因为在打安卓或者ios的包之后StreamingAssets路径下的资源才会被放入包体之中供应用使用。
另外,这里我们使用unity打包接口时使用了无压缩的方式是为了后续我们自己做一次压缩。
unity提供的LZ4压缩方案大概会将原始的Assetbundle压缩到1/3左右(实际测试50m=>15m)。
如果我们用一些其他压缩方式可以让文件压缩率更高,比如LZMA可以压缩到1/5左右(实际测试50m=>9m)
这个地方关于打包选择如何压缩应该结合实际项目来考虑,压缩率高的方式解压和压缩花费的时间是更长的。这里个人采用的方案是首次进入游戏前将压缩的文件做一次性的解压,后续玩家进入游戏后加载资源包就不需要再解压。如果项目完全不考虑包体大小的情况则可以完全不压缩。如果项目不希望玩家首次进游戏有解压处理(考虑到一些玩家会有不耐烦的特性),但是游戏包体又不能太大则可以使用Unity提供的LZ4的压缩方案,该方案在调用UnityAssetBundle加载接口加载资源包里的资源的时候会自动的解压(这样首次加载某个游戏资源的时候会略微慢一点,但只要对应的AssetBundle不卸载,再次加载相同资源就会很快。这是因为unityAssetBundle加载过一次后会缓存到内存中,只要AssetBundle不卸载后续就不需要再次从硬盘读取并解压了)。如果对包体有极致的追求则可以考虑我现在这种方案,自己定制压缩,首次进入游戏做一次性的解压。
生成bundles清单文件主要是为了记录当前玩家游戏资源的相关信息,用于和服务器做对比以便于将最新的资源文件从服务器更新下来。
打包AssetBundle
// 设置资源包输出路径
string folder = PathMgr.instance.BuildPath;
// 设置平台
BuildTarget platform = BuildTarget.Android;
#if UNITY_ANDROID
platform = BuildTarget.Android;
#elif UNITY_IOS
platform = BuildTarget.iOS;
#endif
// 调用打包接口
Bui

本文详细介绍了Unity中Assetbundle的打包流程,包括使用BuildPipeline.BuildAssetBundles接口、整体设计思路、压缩资源到StreamingAssets、输出资源清单文件及其结构。文章还探讨了不同压缩方案的优缺点,并提供了完整的打包代码示例。
最低0.47元/天 解锁文章
3422

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



