69 lines
6.1 KiB
Plaintext
69 lines
6.1 KiB
Plaintext
|
概念:
|
|||
|
Settings:XAsset全局配置
|
|||
|
Build:打bundle需读取的配置,XAsset只会打包Build配置中有的资源
|
|||
|
BuildGroup:负责管理需要打包的资源,相当于文件夹,每个BuildGroup会按名字生成对应的文件夹。
|
|||
|
AssetPack:配置是否加入安装包的依据配置。
|
|||
|
|
|||
|
【画重点】如果要将资源打入安装包,需注意:
|
|||
|
0),创建AssetPack,将所需资源加入进去,并且交付模式选择InstallTime或FastFollow。AssetPack只是判断资源是否进入安装包的依据,并不负责具体生成bundle包。
|
|||
|
1),所有需要生成的bundle包,必须加入BuildGroup,并将其加入Build配置。一个Build可添加多个BuildGroup。
|
|||
|
2),所有在AssetPack中配置的资源,必须加入到BuildGroup中,并配置进Build才能够生效。
|
|||
|
3),分包文件BuildGroup中,AddressMode不能设置为LoadByName和LoadByNameWithoutExtension,最好设置为LoadByPath
|
|||
|
|
|||
|
--Build Bundles(打bundle包)-- 调用【Assets\CaoCao\Scripts\Editor\XAsset\Build\Builder.cs】
|
|||
|
0,获取Settings配置
|
|||
|
1,获取到所有Build配置
|
|||
|
|
|||
|
2,打包所有配置
|
|||
|
0),调用CollectAssets类,收集配置中的资源文件以及相关依赖, 设置到BuildJob的bundledAssets(需打包),rawAssets(按原始资源)中
|
|||
|
1),调用ClearDuplicateAssets类,清理清理重复设置打包分组的资源
|
|||
|
2),如果Build配置中勾选OptimizeDependentAssets, 则调用OptimizeDependentAssets类优化资源文件
|
|||
|
3),调用SaveBuildAssets类,生成json文件到目录:【“{项目根路径}/BundlesCache/{平台}/{Build配置名}.json”】
|
|||
|
文件中记录配置中的所有资源文件以及依赖文件
|
|||
|
4),调用BuildBundles类,根据收集到的资源分别对BuildJob的bundledAssets和rawAssets进行打包
|
|||
|
-1-,对bundledAssets中的资源分别打成单独的bundle文件,如果勾选加密:则在文件头加入32位hash值
|
|||
|
将bundle文件打包到:【" {项目根路径}/BundlesCache/{平台}" 】目录下
|
|||
|
加密后,复制到【“ {项目根路径}/Bundles/{平台}”】下 改名为 【“ {源文件名}_{路径hash}.bundle”】
|
|||
|
-2-,对rawAssets中的资源直接复制【” {项目根路径}/Bundles/{平台}“】 路径下, 改名为 【“ {源文件名}_{路径hash}”】
|
|||
|
-3-,写入文件的hash
|
|||
|
5),调用BuildVersions类,记录每个build配置中资源的依赖关系,保存在【“ {项目根路径}/Bundles/{平台}/{Build配置名_hash}.json”】
|
|||
|
将所有Build配置记录在version.data中,保存在【" {项目根路径}/BundlesCache/{平台}/version.json" 】
|
|||
|
如果Settings中勾选了BuildAssetPackAssets,会设置这个{Build配置名}.json的packed=true
|
|||
|
当packed为true时,获取下载文件的时候会对随包资源进行验证,并且无论如何都会下载随包资源
|
|||
|
|
|||
|
3,将判断为要进入安装包的AssetPack配置,记录在version.preloadPacks中,重写【" {项目根路径}/BundlesCache/{平台}/version.json" 】
|
|||
|
4,将version按版本号重命名后,写入【" {项目根路径}/Bundles/{平台}/version_v{每个Build配置的版本号}.json" 】
|
|||
|
5,以上一步文件的hash存入【" {项目根路径}/BundlesCache/{平台}/updateinfo.json" 】的hash中
|
|||
|
|
|||
|
|
|||
|
--Build Bundles With Last Build(打bundle包)-- 调用【Assets\CaoCao\Scripts\Editor\XAsset\Build\Builder.cs】
|
|||
|
0,获取Settings配置
|
|||
|
1,获取到所有Build配置
|
|||
|
2,打包所有配置
|
|||
|
0),调用LoadBuildAssets,读取 【“{项目根路径}/BundlesCache/{平台}/{Build配置名}.json”】
|
|||
|
收集job.rawAssets和job.bundledAssets
|
|||
|
1),调用BuildBundles类,根据收集到的资源分别对BuildJob的bundledAssets和rawAssets进行打包
|
|||
|
-0-,全部重新生成
|
|||
|
-1-,对bundledAssets中的资源分别打成单独的bundle文件,如果勾选加密:则在文件头加入32位hash值
|
|||
|
将bundle文件打包到:【" {项目根路径}/BundlesCache/{平台}" 】目录下
|
|||
|
加密后,移动到【“ {项目根路径}/Bundles/{平台}”】下 改名为 【“ {源文件名}_{路径hash}.bundle”】
|
|||
|
-2-,对rawAssets中的资源直接复制【” {项目根路径}/Bundles/{平台}“】 路径下, 改名为 【“ {源文件名}_{路径hash}”】
|
|||
|
-3-,写入文件的hash
|
|||
|
2),调用BuildVersions类,记录每个build配置中资源的依赖关系,保存在【“ {项目根路径}/Bundles/{平台}/{Build配置名_hash}.json”】
|
|||
|
将所有Build配置记录在version.data中,保存在【" {项目根路径}/BundlesCache/{平台}/version.json" 】
|
|||
|
如果Settings中勾选了BuildAssetPackAssets,会设置这个{Build配置名}.json的packed=true
|
|||
|
当packed为true时,获取下载文件的时候会对随包资源进行验证,并且无论如何都会下载随包资源
|
|||
|
3,将判断为要进入安装包的AssetPack配置,记录在version.preloadPacks中,重写【" {项目根路径}/BundlesCache/{平台}/version.json" 】
|
|||
|
4,将version按版本号重命名后,写入【" {项目根路径}/Bundles/{平台}/version_v{每个Build配置的版本号}.json" 】
|
|||
|
5,以上一步文件的hash存入【" {项目根路径}/BundlesCache/{平台}/updateinfo.json" 】的hash中
|
|||
|
|
|||
|
【这里有个bug,有时候会漏打资源】
|
|||
|
--Build PlayerAssets(将版本资源打入streamingAssetsPath文件夹)-- -- 调用【Assets\CaoCao\Scripts\Editor\XAsset\Build\Setp\BuildPlayerAsset.cs】
|
|||
|
0,从BuildCache中读取versions.json文件
|
|||
|
----------------1,把未勾选subPackage的【{Build配置名_hash}.json】文件从 【“ {项目根路径}/Bundles/{平台}”】复制到streamingAssetsPath文件夹---------------------
|
|||
|
1,根据versions.json获取到设置为交付模式为Install Time的bundle包, 从“{项目根路径}/Bundle“复制文件到streamingAssetsPath
|
|||
|
0),只有Settings中PlayerAssetsSplitMode设置为SplitByAssetPacksWithInstallTime或IncludeAllAssets才算
|
|||
|
1),只有在versions.data中的bundle才算
|
|||
|
2),如果Settings中勾选了packPlayerAssets,会把所有的资源写到一个二进制文件中,按文件偏移读取资源
|
|||
|
2,将playerassets.json文件写入streamingAssetsPath文件夹
|
|||
|
3,将version.json文件写入streamingAssetsPath文件夹
|