团结引擎对原有资源流程进行了一些特殊优化,新的特性如下所示。
AssetBundle
是团结引擎提供的资源打包与加载方案,本质上是一个二进制文件,缺乏天然的安全保护。为帮助开发者更好地保护游戏资源,团结引擎提供了加密方案。
AssetBundle
加密需使用 LZ4 压缩格式。AssetBundle
前,先指定本次构建所用的加密密钥。BuildAssetBundleOptions
包含ChunkBasedCompression
和EnableProtection
。// 构建
BuildPipeline.SetAssetBundleEncryptKey("0123456789abcdef");
// 指定 BuildAssetBundleOptions 包含:ChunkBasedCompression 和 EnableProtection
BuildPipeline.BuildAssetBundles (outputPath, BuildAssetBundleOptions.ChunkBasedCompression | BuildAssetBundleOptions.EnableProtection, EditorUserBuildSettings.activeBuildTarget);
加载阶段
// 通过指定密钥为null来清除密钥
BuildPipeline.SetAssetBundleEncryptKey(null);
// 加载 AssetBundle 时,先指定本次加载所使用的解密密钥
AssetBundle.SetAssetBundleDecryptKey("0123456789abcdef");
AssetBundle assetBundle = AssetBundle.LoadFromFile("To/bundle");
// 通过指定密钥为null来清除密钥
AssetBundle.SetAssetBundleDecryptKey(null);
随着项目规模扩大,AssetBundle
构建耗时显著增加。其主要原因在于依赖分析需读取每个 Library/Artifacts
中资产文件的头信息,产生大量的IO。导致开发者调用构建接口后,需要很长一段时间才能实际进入打包环节。
团结引擎优化了上述流程,将依赖分析信息存储在 Library/SourceAssetDB
中。引擎基于 LMDB 数据库,查询效率远高于传统的文件级别依赖分析。需要注意的是,开启该功能会使 SourceAssetDB 文件体积略有增加。
勾选 Project Settings
-> Editor
-> Asset Pipeline
-> Enable Storage Artifact Reference in DB
选项即可启用,无需重新导入 Library。首次开启可能会有一定耗时,之后 AssetBundle 构建将自动应用优化。
AssetBundle
全量构建通常耗时较长,严重影响开发迭代效率。团结引擎 1.6.0 版本在AssetBundle
依赖分析优化的基础上,对部分构建流程并行化处理。
在团结引擎 1.6.0 版本中,新增了通过 JobSystem 多线程优化构建 archive 压缩包的步骤,大幅提升AssetBundle
构建速度。未来版本还将陆续推出资产免构建方案和基于 AssetBundle
的多进程并行构建方案,持续优化资产构建流程。
在构建阶段指定 BuildAssetBundleOptions
包含 MultithreadBuildArchive
。
// 指定 BuildAssetBundleOptions 包含:MultithreadBuildArchive
BuildPipeline.BuildAssetBundles (outputPath, BuildAssetBundleOptions.MultithreadBuildArchive, EditorUserBuildSettings.activeBuildTarget);