mirror of https://github.com/tuyoogame/YooAsset
Update AssetBundleBuilder
parent
b6c07cd956
commit
9de27e790d
|
@ -25,19 +25,6 @@ namespace YooAsset.Editor
|
||||||
return $"{outputRoot}/{buildTarget}/{YooAssetSettingsData.Setting.UnityManifestFileName}";
|
return $"{outputRoot}/{buildTarget}/{YooAssetSettingsData.Setting.UnityManifestFileName}";
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 制作AssetBundle的完整名称
|
|
||||||
/// 注意:名称为全部小写并且包含后缀名
|
|
||||||
/// </summary>
|
|
||||||
public static string MakeBundleName(string bundleLabel, string bundleVariant)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(bundleVariant))
|
|
||||||
return bundleLabel.ToLower();
|
|
||||||
else
|
|
||||||
return $"{bundleLabel}.{bundleVariant}".ToLower();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 清空流文件夹
|
/// 清空流文件夹
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -6,25 +6,30 @@ namespace YooAsset.Editor
|
||||||
{
|
{
|
||||||
public class BuildAssetInfo
|
public class BuildAssetInfo
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 资源包名称
|
||||||
|
/// </summary>
|
||||||
|
public string BundleName { private set; get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 资源路径
|
/// 资源路径
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string AssetPath { private set; get; }
|
public string AssetPath { private set; get; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 资源包完整名称
|
|
||||||
/// </summary>
|
|
||||||
public string BundleName { private set; get; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否为原生资源
|
/// 是否为原生资源
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsRawAsset = false;
|
public bool IsRawAsset { private set; get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 不写入资源列表
|
||||||
|
/// </summary>
|
||||||
|
public bool NotWriteToAssetList { private set; get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否为主动收集资源
|
/// 是否为主动收集资源
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsCollectAsset = false;
|
public bool IsCollectAsset { private set; get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 被依赖次数
|
/// 被依赖次数
|
||||||
|
@ -32,7 +37,7 @@ namespace YooAsset.Editor
|
||||||
public int DependCount = 0;
|
public int DependCount = 0;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 资源标记列表
|
/// 资源分类标签列表
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public readonly List<string> AssetTags = new List<string>();
|
public readonly List<string> AssetTags = new List<string>();
|
||||||
|
|
||||||
|
@ -43,9 +48,19 @@ namespace YooAsset.Editor
|
||||||
public List<BuildAssetInfo> AllDependAssetInfos { private set; get; }
|
public List<BuildAssetInfo> AllDependAssetInfos { private set; get; }
|
||||||
|
|
||||||
|
|
||||||
|
public BuildAssetInfo(string assetPath, bool isRawAsset, bool notWriteToAssetList)
|
||||||
|
{
|
||||||
|
AssetPath = assetPath;
|
||||||
|
IsRawAsset = isRawAsset;
|
||||||
|
NotWriteToAssetList = notWriteToAssetList;
|
||||||
|
IsCollectAsset = true;
|
||||||
|
}
|
||||||
public BuildAssetInfo(string assetPath)
|
public BuildAssetInfo(string assetPath)
|
||||||
{
|
{
|
||||||
AssetPath = assetPath;
|
AssetPath = assetPath;
|
||||||
|
IsRawAsset = false;
|
||||||
|
NotWriteToAssetList = true;
|
||||||
|
IsCollectAsset = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -60,18 +75,18 @@ namespace YooAsset.Editor
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 设置资源包的标签和文件格式
|
/// 设置资源包名称
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void SetBundleLabelAndVariant(string bundleLabel, string bundleVariant)
|
public void SetBundleName(string bundleName)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(BundleName) == false)
|
if (string.IsNullOrEmpty(BundleName) == false)
|
||||||
throw new System.Exception("Should never get here !");
|
throw new System.Exception("Should never get here !");
|
||||||
|
|
||||||
BundleName = AssetBundleBuilderHelper.MakeBundleName(bundleLabel, bundleVariant);
|
BundleName = bundleName;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 添加资源标记
|
/// 添加资源分类标签
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void AddAssetTags(List<string> tags)
|
public void AddAssetTags(List<string> tags)
|
||||||
{
|
{
|
||||||
|
@ -82,7 +97,7 @@ namespace YooAsset.Editor
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 添加资源标记
|
/// 添加资源分类标签
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void AddAssetTag(string tag)
|
public void AddAssetTag(string tag)
|
||||||
{
|
{
|
||||||
|
@ -93,7 +108,7 @@ namespace YooAsset.Editor
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 资源包名是否有效
|
/// 资源包名称是否有效
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool BundleNameIsValid()
|
public bool BundleNameIsValid()
|
||||||
{
|
{
|
||||||
|
|
|
@ -9,13 +9,13 @@ namespace YooAsset.Editor
|
||||||
public class BuildBundleInfo
|
public class BuildBundleInfo
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 资源包完整名称
|
/// 资源包名称
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string BundleName { private set; get; }
|
public string BundleName { private set; get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 参与构建的资源列表
|
/// 参与构建的资源列表
|
||||||
/// 注意:不包含冗余资源或零依赖资源
|
/// 注意:不包含零依赖资源
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public readonly List<BuildAssetInfo> BuildinAssets = new List<BuildAssetInfo>();
|
public readonly List<BuildAssetInfo> BuildinAssets = new List<BuildAssetInfo>();
|
||||||
|
|
||||||
|
@ -41,6 +41,17 @@ namespace YooAsset.Editor
|
||||||
BundleName = bundleName;
|
BundleName = bundleName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 添加一个打包资源
|
||||||
|
/// </summary>
|
||||||
|
public void PackAsset(BuildAssetInfo assetInfo)
|
||||||
|
{
|
||||||
|
if (IsContainsAsset(assetInfo.AssetPath))
|
||||||
|
throw new System.Exception($"Asset is existed : {assetInfo.AssetPath}");
|
||||||
|
|
||||||
|
BuildinAssets.Add(assetInfo);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否包含指定资源
|
/// 是否包含指定资源
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -57,29 +68,7 @@ namespace YooAsset.Editor
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 添加一个打包资源
|
/// 获取资源标签列表
|
||||||
/// </summary>
|
|
||||||
public void PackAsset(BuildAssetInfo assetInfo)
|
|
||||||
{
|
|
||||||
if (IsContainsAsset(assetInfo.AssetPath))
|
|
||||||
throw new System.Exception($"Asset is existed : {assetInfo.AssetPath}");
|
|
||||||
|
|
||||||
BuildinAssets.Add(assetInfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 获取文件的扩展名
|
|
||||||
/// </summary>
|
|
||||||
public string GetAppendExtension()
|
|
||||||
{
|
|
||||||
if (IsRawFile)
|
|
||||||
return $".{YooAssetSettingsData.Setting.RawFileVariant}";
|
|
||||||
else
|
|
||||||
return $".{YooAssetSettingsData.Setting.AssetBundleFileVariant}";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 获取资源标记列表
|
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string[] GetAssetTags()
|
public string[] GetAssetTags()
|
||||||
{
|
{
|
||||||
|
@ -95,6 +84,17 @@ namespace YooAsset.Editor
|
||||||
return result.ToArray();
|
return result.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取文件的扩展名
|
||||||
|
/// </summary>
|
||||||
|
public string GetAppendExtension()
|
||||||
|
{
|
||||||
|
if (IsRawFile)
|
||||||
|
return $".{YooAssetSettingsData.Setting.RawFileVariant}";
|
||||||
|
else
|
||||||
|
return $".{YooAssetSettingsData.Setting.AssetBundleFileVariant}";
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取构建的资源路径列表
|
/// 获取构建的资源路径列表
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -104,11 +104,11 @@ namespace YooAsset.Editor
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取主动收集的资源信息列表
|
/// 获取所有写入补丁清单的资源
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public BuildAssetInfo[] GetCollectAssetInfos()
|
public BuildAssetInfo[] GetAllPatchAssetInfos()
|
||||||
{
|
{
|
||||||
return BuildinAssets.Where(t => t.IsCollectAsset).ToArray();
|
return BuildinAssets.Where(t => t.IsCollectAsset && t.NotWriteToAssetList == false).ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -0,0 +1,113 @@
|
||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEditor;
|
||||||
|
|
||||||
|
namespace YooAsset.Editor
|
||||||
|
{
|
||||||
|
public class BuildMapContext : IContextObject
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 参与构建的资源总数
|
||||||
|
/// 说明:包括主动收集的资源以及其依赖的所有资源
|
||||||
|
/// </summary>
|
||||||
|
public int AssetFileCount;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 资源包列表
|
||||||
|
/// </summary>
|
||||||
|
public readonly List<BuildBundleInfo> BundleInfos = new List<BuildBundleInfo>(1000);
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 添加一个打包资源
|
||||||
|
/// </summary>
|
||||||
|
public void PackAsset(BuildAssetInfo assetInfo)
|
||||||
|
{
|
||||||
|
if (TryGetBundleInfo(assetInfo.BundleName, out BuildBundleInfo bundleInfo))
|
||||||
|
{
|
||||||
|
bundleInfo.PackAsset(assetInfo);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
BuildBundleInfo newBundleInfo = new BuildBundleInfo(assetInfo.BundleName);
|
||||||
|
newBundleInfo.PackAsset(assetInfo);
|
||||||
|
BundleInfos.Add(newBundleInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取所有的打包资源
|
||||||
|
/// </summary>
|
||||||
|
public List<BuildAssetInfo> GetAllAssets()
|
||||||
|
{
|
||||||
|
List<BuildAssetInfo> result = new List<BuildAssetInfo>(BundleInfos.Count);
|
||||||
|
foreach (var bundleInfo in BundleInfos)
|
||||||
|
{
|
||||||
|
result.AddRange(bundleInfo.BuildinAssets);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取AssetBundle内包含的标记列表
|
||||||
|
/// </summary>
|
||||||
|
public string[] GetAssetTags(string bundleName)
|
||||||
|
{
|
||||||
|
if (TryGetBundleInfo(bundleName, out BuildBundleInfo bundleInfo))
|
||||||
|
{
|
||||||
|
return bundleInfo.GetAssetTags();
|
||||||
|
}
|
||||||
|
throw new Exception($"Not found {nameof(BuildBundleInfo)} : {bundleName}");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取AssetBundle内构建的资源路径列表
|
||||||
|
/// </summary>
|
||||||
|
public string[] GetBuildinAssetPaths(string bundleName)
|
||||||
|
{
|
||||||
|
if (TryGetBundleInfo(bundleName, out BuildBundleInfo bundleInfo))
|
||||||
|
{
|
||||||
|
return bundleInfo.GetBuildinAssetPaths();
|
||||||
|
}
|
||||||
|
throw new Exception($"Not found {nameof(BuildBundleInfo)} : {bundleName}");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取构建管线里需要的数据
|
||||||
|
/// </summary>
|
||||||
|
public UnityEditor.AssetBundleBuild[] GetPipelineBuilds()
|
||||||
|
{
|
||||||
|
List<UnityEditor.AssetBundleBuild> builds = new List<UnityEditor.AssetBundleBuild>(BundleInfos.Count);
|
||||||
|
foreach (var bundleInfo in BundleInfos)
|
||||||
|
{
|
||||||
|
if (bundleInfo.IsRawFile == false)
|
||||||
|
builds.Add(bundleInfo.CreatePipelineBuild());
|
||||||
|
}
|
||||||
|
return builds.ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否包含资源包
|
||||||
|
/// </summary>
|
||||||
|
public bool IsContainsBundle(string bundleName)
|
||||||
|
{
|
||||||
|
return TryGetBundleInfo(bundleName, out BuildBundleInfo bundleInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool TryGetBundleInfo(string bundleName, out BuildBundleInfo result)
|
||||||
|
{
|
||||||
|
foreach (var bundleInfo in BundleInfos)
|
||||||
|
{
|
||||||
|
if (bundleInfo.BundleName == bundleName)
|
||||||
|
{
|
||||||
|
result = bundleInfo;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result = null;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 8229aa3f8a369204db5c368715191e2f
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,110 @@
|
||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace YooAsset.Editor
|
||||||
|
{
|
||||||
|
public static class BuildMapHelper
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 执行资源构建上下文
|
||||||
|
/// </summary>
|
||||||
|
public static BuildMapContext SetupBuildMap()
|
||||||
|
{
|
||||||
|
BuildMapContext context = new BuildMapContext();
|
||||||
|
Dictionary<string, BuildAssetInfo> buildAssetDic = new Dictionary<string, BuildAssetInfo>();
|
||||||
|
|
||||||
|
// 1. 获取主动收集的资源
|
||||||
|
List<CollectAssetInfo> collectAssetInfos = AssetBundleGrouperSettingData.Setting.GetAllCollectAssets();
|
||||||
|
|
||||||
|
// 2. 录入主动收集的资源
|
||||||
|
foreach (var collectAssetInfo in collectAssetInfos)
|
||||||
|
{
|
||||||
|
if (buildAssetDic.ContainsKey(collectAssetInfo.AssetPath) == false)
|
||||||
|
{
|
||||||
|
var buildAssetInfo = new BuildAssetInfo(collectAssetInfo.AssetPath, collectAssetInfo.IsRawAsset, collectAssetInfo.NotWriteToAssetList);
|
||||||
|
buildAssetInfo.SetBundleName(collectAssetInfo.BundleName);
|
||||||
|
buildAssetInfo.AddAssetTags(collectAssetInfo.AssetTags);
|
||||||
|
buildAssetDic.Add(collectAssetInfo.AssetPath, buildAssetInfo);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new Exception($"Should never get here !");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. 录入并分析依赖资源
|
||||||
|
foreach (var collectAssetInfo in collectAssetInfos)
|
||||||
|
{
|
||||||
|
foreach (var dependAssetPath in collectAssetInfo.DependAssets)
|
||||||
|
{
|
||||||
|
if (buildAssetDic.ContainsKey(dependAssetPath))
|
||||||
|
{
|
||||||
|
buildAssetDic[dependAssetPath].DependCount++;
|
||||||
|
buildAssetDic[dependAssetPath].AddAssetTags(collectAssetInfo.AssetTags);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var buildAssetInfo = new BuildAssetInfo(dependAssetPath);
|
||||||
|
buildAssetInfo.AddAssetTags(collectAssetInfo.AssetTags);
|
||||||
|
buildAssetDic.Add(dependAssetPath, buildAssetInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
context.AssetFileCount = buildAssetDic.Count;
|
||||||
|
|
||||||
|
// 4. 设置主动收集资源的依赖列表
|
||||||
|
foreach (var collectAssetInfo in collectAssetInfos)
|
||||||
|
{
|
||||||
|
var dependAssetInfos = new List<BuildAssetInfo>(collectAssetInfo.DependAssets.Count);
|
||||||
|
foreach (var dependAssetPath in collectAssetInfo.DependAssets)
|
||||||
|
{
|
||||||
|
if (buildAssetDic.TryGetValue(dependAssetPath, out BuildAssetInfo value))
|
||||||
|
dependAssetInfos.Add(value);
|
||||||
|
else
|
||||||
|
throw new Exception("Should never get here !");
|
||||||
|
}
|
||||||
|
buildAssetDic[collectAssetInfo.AssetPath].SetAllDependAssetInfos(dependAssetInfos);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 5. 移除零依赖的资源
|
||||||
|
List<BuildAssetInfo> removeList = new List<BuildAssetInfo>();
|
||||||
|
foreach (KeyValuePair<string, BuildAssetInfo> pair in buildAssetDic)
|
||||||
|
{
|
||||||
|
var buildAssetInfo = pair.Value;
|
||||||
|
if (buildAssetInfo.IsCollectAsset)
|
||||||
|
continue;
|
||||||
|
if (buildAssetInfo.DependCount == 0)
|
||||||
|
removeList.Add(buildAssetInfo);
|
||||||
|
}
|
||||||
|
foreach (var removeValue in removeList)
|
||||||
|
{
|
||||||
|
buildAssetDic.Remove(removeValue.AssetPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 6. 设置未命名的资源包
|
||||||
|
IPackRule defaultPackRule = new PackDirectory();
|
||||||
|
foreach (KeyValuePair<string, BuildAssetInfo> pair in buildAssetDic)
|
||||||
|
{
|
||||||
|
var buildAssetInfo = pair.Value;
|
||||||
|
if (buildAssetInfo.BundleNameIsValid() == false)
|
||||||
|
{
|
||||||
|
string bundleName = defaultPackRule.GetBundleName(new PackRuleData(buildAssetInfo.AssetPath));
|
||||||
|
bundleName = AssetBundleCollector.RevisedBundleName(bundleName);
|
||||||
|
buildAssetInfo.SetBundleName(bundleName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 7. 构建资源包
|
||||||
|
var allBuildAssets = buildAssetDic.Values.ToList();
|
||||||
|
if (allBuildAssets.Count == 0)
|
||||||
|
throw new Exception("构建的资源列表不能为空");
|
||||||
|
foreach (var assetInfo in allBuildAssets)
|
||||||
|
{
|
||||||
|
context.PackAsset(assetInfo);
|
||||||
|
}
|
||||||
|
return context;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: e9274735f1f14af4b893c21a4240b816
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -26,16 +26,6 @@ namespace YooAsset.Editor
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<ReportBundleInfo> BundleInfos = new List<ReportBundleInfo>();
|
public List<ReportBundleInfo> BundleInfos = new List<ReportBundleInfo>();
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 收集器信息列表
|
|
||||||
/// </summary>
|
|
||||||
public List<string> CollectorInfoList = new List<string>();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 冗余的资源列表
|
|
||||||
/// </summary>
|
|
||||||
public List<string> RedundancyAssetList = new List<string>();
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取资源包信息类
|
/// 获取资源包信息类
|
||||||
|
|
|
@ -8,7 +8,7 @@ namespace YooAsset.Editor
|
||||||
public class ReportBundleInfo
|
public class ReportBundleInfo
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 资源包完整名称
|
/// 资源包名称
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string BundleName;
|
public string BundleName;
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,7 @@ namespace YooAsset.Editor
|
||||||
public bool AutoCollectShaders;
|
public bool AutoCollectShaders;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 自动收集的着色器资源包名
|
/// 自动收集的着色器资源包名称
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string ShadersBundleName;
|
public string ShadersBundleName;
|
||||||
|
|
||||||
|
@ -74,7 +74,6 @@ namespace YooAsset.Editor
|
||||||
|
|
||||||
// 构建结果
|
// 构建结果
|
||||||
public int AssetFileTotalCount;
|
public int AssetFileTotalCount;
|
||||||
public int RedundancyAssetFileCount;
|
|
||||||
public int AllBundleTotalCount;
|
public int AllBundleTotalCount;
|
||||||
public long AllBundleTotalSize;
|
public long AllBundleTotalSize;
|
||||||
public int BuildinBundleTotalCount;
|
public int BuildinBundleTotalCount;
|
||||||
|
|
|
@ -18,7 +18,7 @@ namespace YooAsset.Editor
|
||||||
void IBuildTask.Run(BuildContext context)
|
void IBuildTask.Run(BuildContext context)
|
||||||
{
|
{
|
||||||
var buildParametersContext = context.GetContextObject<AssetBundleBuilder.BuildParametersContext>();
|
var buildParametersContext = context.GetContextObject<AssetBundleBuilder.BuildParametersContext>();
|
||||||
var buildMapContext = context.GetContextObject<TaskGetBuildMap.BuildMapContext>();
|
var buildMapContext = context.GetContextObject<BuildMapContext>();
|
||||||
|
|
||||||
Debug.Log($"开始构建......");
|
Debug.Log($"开始构建......");
|
||||||
BuildAssetBundleOptions opt = buildParametersContext.GetPipelineBuildOptions();
|
BuildAssetBundleOptions opt = buildParametersContext.GetPipelineBuildOptions();
|
||||||
|
@ -57,7 +57,7 @@ namespace YooAsset.Editor
|
||||||
private void VerifyingBuildingResult(BuildContext context, AssetBundleManifest unityManifest)
|
private void VerifyingBuildingResult(BuildContext context, AssetBundleManifest unityManifest)
|
||||||
{
|
{
|
||||||
var buildParameters = context.GetContextObject<AssetBundleBuilder.BuildParametersContext>();
|
var buildParameters = context.GetContextObject<AssetBundleBuilder.BuildParametersContext>();
|
||||||
var buildMapContext = context.GetContextObject<TaskGetBuildMap.BuildMapContext>();
|
var buildMapContext = context.GetContextObject<BuildMapContext>();
|
||||||
string[] buildedBundles = unityManifest.GetAllAssetBundles();
|
string[] buildedBundles = unityManifest.GetAllAssetBundles();
|
||||||
|
|
||||||
// 1. 过滤掉原生Bundle
|
// 1. 过滤掉原生Bundle
|
||||||
|
|
|
@ -14,7 +14,7 @@ namespace YooAsset.Editor
|
||||||
{
|
{
|
||||||
var buildParameters = context.GetContextObject<AssetBundleBuilder.BuildParametersContext>();
|
var buildParameters = context.GetContextObject<AssetBundleBuilder.BuildParametersContext>();
|
||||||
var encryptionContext = context.GetContextObject<TaskEncryption.EncryptionContext>();
|
var encryptionContext = context.GetContextObject<TaskEncryption.EncryptionContext>();
|
||||||
var buildMapContext = context.GetContextObject<TaskGetBuildMap.BuildMapContext>();
|
var buildMapContext = context.GetContextObject<BuildMapContext>();
|
||||||
CreatePatchManifestFile(buildParameters, buildMapContext, encryptionContext);
|
CreatePatchManifestFile(buildParameters, buildMapContext, encryptionContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ namespace YooAsset.Editor
|
||||||
/// 创建补丁清单文件到输出目录
|
/// 创建补丁清单文件到输出目录
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void CreatePatchManifestFile(AssetBundleBuilder.BuildParametersContext buildParameters,
|
private void CreatePatchManifestFile(AssetBundleBuilder.BuildParametersContext buildParameters,
|
||||||
TaskGetBuildMap.BuildMapContext buildMapContext, TaskEncryption.EncryptionContext encryptionContext)
|
BuildMapContext buildMapContext, TaskEncryption.EncryptionContext encryptionContext)
|
||||||
{
|
{
|
||||||
// 创建新补丁清单
|
// 创建新补丁清单
|
||||||
PatchManifest patchManifest = new PatchManifest();
|
PatchManifest patchManifest = new PatchManifest();
|
||||||
|
@ -47,7 +47,7 @@ namespace YooAsset.Editor
|
||||||
/// 获取资源包列表
|
/// 获取资源包列表
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private List<PatchBundle> GetAllPatchBundle(AssetBundleBuilder.BuildParametersContext buildParameters,
|
private List<PatchBundle> GetAllPatchBundle(AssetBundleBuilder.BuildParametersContext buildParameters,
|
||||||
TaskGetBuildMap.BuildMapContext buildMapContext, TaskEncryption.EncryptionContext encryptionContext)
|
BuildMapContext buildMapContext, TaskEncryption.EncryptionContext encryptionContext)
|
||||||
{
|
{
|
||||||
List<PatchBundle> result = new List<PatchBundle>(1000);
|
List<PatchBundle> result = new List<PatchBundle>(1000);
|
||||||
|
|
||||||
|
@ -111,12 +111,12 @@ namespace YooAsset.Editor
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取资源列表
|
/// 获取资源列表
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private List<PatchAsset> GetAllPatchAsset(TaskGetBuildMap.BuildMapContext buildMapContext, PatchManifest patchManifest)
|
private List<PatchAsset> GetAllPatchAsset(BuildMapContext buildMapContext, PatchManifest patchManifest)
|
||||||
{
|
{
|
||||||
List<PatchAsset> result = new List<PatchAsset>(1000);
|
List<PatchAsset> result = new List<PatchAsset>(1000);
|
||||||
foreach (var bundleInfo in buildMapContext.BundleInfos)
|
foreach (var bundleInfo in buildMapContext.BundleInfos)
|
||||||
{
|
{
|
||||||
var assetInfos = bundleInfo.GetCollectAssetInfos();
|
var assetInfos = bundleInfo.GetAllPatchAssetInfos();
|
||||||
foreach (var assetInfo in assetInfos)
|
foreach (var assetInfo in assetInfos)
|
||||||
{
|
{
|
||||||
PatchAsset patchAsset = new PatchAsset();
|
PatchAsset patchAsset = new PatchAsset();
|
||||||
|
|
|
@ -12,11 +12,11 @@ namespace YooAsset.Editor
|
||||||
void IBuildTask.Run(BuildContext context)
|
void IBuildTask.Run(BuildContext context)
|
||||||
{
|
{
|
||||||
var buildParameters = context.GetContextObject<AssetBundleBuilder.BuildParametersContext>();
|
var buildParameters = context.GetContextObject<AssetBundleBuilder.BuildParametersContext>();
|
||||||
var buildMapContext = context.GetContextObject<TaskGetBuildMap.BuildMapContext>();
|
var buildMapContext = context.GetContextObject<BuildMapContext>();
|
||||||
CreateReportFile(buildParameters, buildMapContext);
|
CreateReportFile(buildParameters, buildMapContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CreateReportFile(AssetBundleBuilder.BuildParametersContext buildParameters, TaskGetBuildMap.BuildMapContext buildMapContext)
|
private void CreateReportFile(AssetBundleBuilder.BuildParametersContext buildParameters, BuildMapContext buildMapContext)
|
||||||
{
|
{
|
||||||
PatchManifest patchManifest = AssetBundleBuilderHelper.LoadPatchManifestFile(buildParameters.PipelineOutputDirectory);
|
PatchManifest patchManifest = AssetBundleBuilderHelper.LoadPatchManifestFile(buildParameters.PipelineOutputDirectory);
|
||||||
BuildReport buildReport = new BuildReport();
|
BuildReport buildReport = new BuildReport();
|
||||||
|
@ -31,8 +31,8 @@ namespace YooAsset.Editor
|
||||||
buildReport.Summary.BuildVersion = buildParameters.Parameters.BuildVersion;
|
buildReport.Summary.BuildVersion = buildParameters.Parameters.BuildVersion;
|
||||||
buildReport.Summary.EnableAutoCollect = buildParameters.Parameters.EnableAutoCollect;
|
buildReport.Summary.EnableAutoCollect = buildParameters.Parameters.EnableAutoCollect;
|
||||||
buildReport.Summary.AppendFileExtension = buildParameters.Parameters.AppendFileExtension;
|
buildReport.Summary.AppendFileExtension = buildParameters.Parameters.AppendFileExtension;
|
||||||
buildReport.Summary.AutoCollectShaders = AssetBundleCollectorSettingData.Setting.AutoCollectShaders;
|
buildReport.Summary.AutoCollectShaders = AssetBundleGrouperSettingData.Setting.AutoCollectShaders;
|
||||||
buildReport.Summary.ShadersBundleName = AssetBundleCollectorSettingData.Setting.ShadersBundleName;
|
buildReport.Summary.ShadersBundleName = AssetBundleGrouperSettingData.Setting.ShadersBundleName;
|
||||||
buildReport.Summary.EncryptionServicesClassName = buildParameters.Parameters.EncryptionServices == null ?
|
buildReport.Summary.EncryptionServicesClassName = buildParameters.Parameters.EncryptionServices == null ?
|
||||||
"null" : buildParameters.Parameters.EncryptionServices.GetType().FullName;
|
"null" : buildParameters.Parameters.EncryptionServices.GetType().FullName;
|
||||||
buildReport.Summary.RedundancyServicesClassName = buildParameters.Parameters.RedundancyServices == null ?
|
buildReport.Summary.RedundancyServicesClassName = buildParameters.Parameters.RedundancyServices == null ?
|
||||||
|
@ -49,7 +49,6 @@ namespace YooAsset.Editor
|
||||||
|
|
||||||
// 构建结果
|
// 构建结果
|
||||||
buildReport.Summary.AssetFileTotalCount = buildMapContext.AssetFileCount;
|
buildReport.Summary.AssetFileTotalCount = buildMapContext.AssetFileCount;
|
||||||
buildReport.Summary.RedundancyAssetFileCount = buildMapContext.RedundancyAssetList.Count;
|
|
||||||
buildReport.Summary.AllBundleTotalCount = GetAllBundleCount(patchManifest);
|
buildReport.Summary.AllBundleTotalCount = GetAllBundleCount(patchManifest);
|
||||||
buildReport.Summary.AllBundleTotalSize = GetAllBundleSize(patchManifest);
|
buildReport.Summary.AllBundleTotalSize = GetAllBundleSize(patchManifest);
|
||||||
buildReport.Summary.BuildinBundleTotalCount = GetBuildinBundleCount(patchManifest);
|
buildReport.Summary.BuildinBundleTotalCount = GetBuildinBundleCount(patchManifest);
|
||||||
|
@ -58,8 +57,6 @@ namespace YooAsset.Editor
|
||||||
buildReport.Summary.EncryptedBundleTotalSize = GetEncryptedBundleSize(patchManifest);
|
buildReport.Summary.EncryptedBundleTotalSize = GetEncryptedBundleSize(patchManifest);
|
||||||
buildReport.Summary.RawBundleTotalCount = GetRawBundleCount(patchManifest);
|
buildReport.Summary.RawBundleTotalCount = GetRawBundleCount(patchManifest);
|
||||||
buildReport.Summary.RawBundleTotalSize = GetRawBundleSize(patchManifest);
|
buildReport.Summary.RawBundleTotalSize = GetRawBundleSize(patchManifest);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 资源对象列表
|
// 资源对象列表
|
||||||
|
@ -90,20 +87,6 @@ namespace YooAsset.Editor
|
||||||
buildReport.BundleInfos.Add(reportBundleInfo);
|
buildReport.BundleInfos.Add(reportBundleInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 收集器列表
|
|
||||||
for (int i = 0; i < AssetBundleCollectorSettingData.Setting.Collectors.Count; i++)
|
|
||||||
{
|
|
||||||
var wrapper = AssetBundleCollectorSettingData.Setting.Collectors[i];
|
|
||||||
buildReport.CollectorInfoList.Add(wrapper.ToString());
|
|
||||||
}
|
|
||||||
|
|
||||||
// 冗余资源列表
|
|
||||||
for (int i = 0; i < buildMapContext.RedundancyAssetList.Count; i++)
|
|
||||||
{
|
|
||||||
string redundancyAssetPath = buildMapContext.RedundancyAssetList[i];
|
|
||||||
buildReport.RedundancyAssetList.Add(redundancyAssetPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 删除旧文件
|
// 删除旧文件
|
||||||
string filePath = $"{buildParameters.PipelineOutputDirectory}/{YooAssetSettings.ReportFileName}";
|
string filePath = $"{buildParameters.PipelineOutputDirectory}/{YooAssetSettings.ReportFileName}";
|
||||||
if (File.Exists(filePath))
|
if (File.Exists(filePath))
|
||||||
|
@ -130,7 +113,7 @@ namespace YooAsset.Editor
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取资源对象依赖的其它所有资源
|
/// 获取资源对象依赖的其它所有资源
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private List<string> GetDependAssets(TaskGetBuildMap.BuildMapContext buildMapContext, string bundleName, string assetPath)
|
private List<string> GetDependAssets(BuildMapContext buildMapContext, string bundleName, string assetPath)
|
||||||
{
|
{
|
||||||
List<string> result = new List<string>();
|
List<string> result = new List<string>();
|
||||||
if (buildMapContext.TryGetBundleInfo(bundleName, out BuildBundleInfo bundleInfo))
|
if (buildMapContext.TryGetBundleInfo(bundleName, out BuildBundleInfo bundleInfo))
|
||||||
|
|
|
@ -24,7 +24,7 @@ namespace YooAsset.Editor
|
||||||
void IBuildTask.Run(BuildContext context)
|
void IBuildTask.Run(BuildContext context)
|
||||||
{
|
{
|
||||||
var buildParameters = context.GetContextObject<AssetBundleBuilder.BuildParametersContext>();
|
var buildParameters = context.GetContextObject<AssetBundleBuilder.BuildParametersContext>();
|
||||||
var buildMapContext = context.GetContextObject<TaskGetBuildMap.BuildMapContext>();
|
var buildMapContext = context.GetContextObject<BuildMapContext>();
|
||||||
|
|
||||||
EncryptionContext encryptionContext = new EncryptionContext();
|
EncryptionContext encryptionContext = new EncryptionContext();
|
||||||
encryptionContext.EncryptList = EncryptFiles(buildParameters, buildMapContext);
|
encryptionContext.EncryptList = EncryptFiles(buildParameters, buildMapContext);
|
||||||
|
@ -34,7 +34,7 @@ namespace YooAsset.Editor
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 加密文件
|
/// 加密文件
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private List<string> EncryptFiles(AssetBundleBuilder.BuildParametersContext buildParameters, TaskGetBuildMap.BuildMapContext buildMapContext)
|
private List<string> EncryptFiles(AssetBundleBuilder.BuildParametersContext buildParameters, BuildMapContext buildMapContext)
|
||||||
{
|
{
|
||||||
var encryptionServices = buildParameters.Parameters.EncryptionServices;
|
var encryptionServices = buildParameters.Parameters.EncryptionServices;
|
||||||
|
|
||||||
|
|
|
@ -9,267 +9,15 @@ namespace YooAsset.Editor
|
||||||
{
|
{
|
||||||
public class TaskGetBuildMap : IBuildTask
|
public class TaskGetBuildMap : IBuildTask
|
||||||
{
|
{
|
||||||
public class BuildMapContext : IContextObject
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 参与构建的资源总数
|
|
||||||
/// 说明:包括主动收集的资源以及其依赖的所有资源
|
|
||||||
/// </summary>
|
|
||||||
public int AssetFileCount;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 资源包列表
|
|
||||||
/// </summary>
|
|
||||||
public readonly List<BuildBundleInfo> BundleInfos = new List<BuildBundleInfo>(1000);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 冗余的资源列表
|
|
||||||
/// </summary>
|
|
||||||
public readonly List<string> RedundancyAssetList = new List<string>(1000);
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 添加一个打包资源
|
|
||||||
/// </summary>
|
|
||||||
public void PackAsset(BuildAssetInfo assetInfo)
|
|
||||||
{
|
|
||||||
if (TryGetBundleInfo(assetInfo.BundleName, out BuildBundleInfo bundleInfo))
|
|
||||||
{
|
|
||||||
bundleInfo.PackAsset(assetInfo);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
BuildBundleInfo newBundleInfo = new BuildBundleInfo(assetInfo.BundleName);
|
|
||||||
newBundleInfo.PackAsset(assetInfo);
|
|
||||||
BundleInfos.Add(newBundleInfo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 获取所有的打包资源
|
|
||||||
/// </summary>
|
|
||||||
public List<BuildAssetInfo> GetAllAssets()
|
|
||||||
{
|
|
||||||
List<BuildAssetInfo> result = new List<BuildAssetInfo>(BundleInfos.Count);
|
|
||||||
foreach (var bundleInfo in BundleInfos)
|
|
||||||
{
|
|
||||||
result.AddRange(bundleInfo.BuildinAssets);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 获取AssetBundle内包含的标记列表
|
|
||||||
/// </summary>
|
|
||||||
public string[] GetAssetTags(string bundleFullName)
|
|
||||||
{
|
|
||||||
if (TryGetBundleInfo(bundleFullName, out BuildBundleInfo bundleInfo))
|
|
||||||
{
|
|
||||||
return bundleInfo.GetAssetTags();
|
|
||||||
}
|
|
||||||
throw new Exception($"Not found {nameof(BuildBundleInfo)} : {bundleFullName}");
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 获取AssetBundle内构建的资源路径列表
|
|
||||||
/// </summary>
|
|
||||||
public string[] GetBuildinAssetPaths(string bundleFullName)
|
|
||||||
{
|
|
||||||
if (TryGetBundleInfo(bundleFullName, out BuildBundleInfo bundleInfo))
|
|
||||||
{
|
|
||||||
return bundleInfo.GetBuildinAssetPaths();
|
|
||||||
}
|
|
||||||
throw new Exception($"Not found {nameof(BuildBundleInfo)} : {bundleFullName}");
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 获取构建管线里需要的数据
|
|
||||||
/// </summary>
|
|
||||||
public UnityEditor.AssetBundleBuild[] GetPipelineBuilds()
|
|
||||||
{
|
|
||||||
List<UnityEditor.AssetBundleBuild> builds = new List<UnityEditor.AssetBundleBuild>(BundleInfos.Count);
|
|
||||||
foreach (var bundleInfo in BundleInfos)
|
|
||||||
{
|
|
||||||
if (bundleInfo.IsRawFile == false)
|
|
||||||
builds.Add(bundleInfo.CreatePipelineBuild());
|
|
||||||
}
|
|
||||||
return builds.ToArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 是否包含资源包
|
|
||||||
/// </summary>
|
|
||||||
public bool IsContainsBundle(string bundleFullName)
|
|
||||||
{
|
|
||||||
return TryGetBundleInfo(bundleFullName, out BuildBundleInfo bundleInfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool TryGetBundleInfo(string bundleFullName, out BuildBundleInfo result)
|
|
||||||
{
|
|
||||||
foreach (var bundleInfo in BundleInfos)
|
|
||||||
{
|
|
||||||
if (bundleInfo.BundleName == bundleFullName)
|
|
||||||
{
|
|
||||||
result = bundleInfo;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
result = null;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void IBuildTask.Run(BuildContext context)
|
void IBuildTask.Run(BuildContext context)
|
||||||
{
|
{
|
||||||
var buildParametersContext = context.GetContextObject<AssetBundleBuilder.BuildParametersContext>();
|
var buildMapContext = BuildMapHelper.SetupBuildMap();
|
||||||
BuildMapContext buildMapContext = new BuildMapContext();
|
|
||||||
context.SetContextObject(buildMapContext);
|
context.SetContextObject(buildMapContext);
|
||||||
SetupBuildMap(buildMapContext, buildParametersContext);
|
|
||||||
|
|
||||||
// 检测构建结果
|
// 检测构建结果
|
||||||
CheckBuildMapContent(buildMapContext);
|
CheckBuildMapContent(buildMapContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 组织构建的资源包
|
|
||||||
/// </summary>
|
|
||||||
private void SetupBuildMap(BuildMapContext buildMapContext, AssetBundleBuilder.BuildParametersContext buildParameters)
|
|
||||||
{
|
|
||||||
Dictionary<string, BuildAssetInfo> buildAssetDic = new Dictionary<string, BuildAssetInfo>();
|
|
||||||
|
|
||||||
// 1. 获取主动收集的资源
|
|
||||||
List<CollectAssetInfo> allCollectInfos = AssetBundleCollectorSettingData.GetAllCollectAssets();
|
|
||||||
|
|
||||||
// 2. 对收集的资源进行依赖分析
|
|
||||||
int progressValue = 0;
|
|
||||||
foreach (CollectAssetInfo collectInfo in allCollectInfos)
|
|
||||||
{
|
|
||||||
string mainAssetPath = collectInfo.AssetPath;
|
|
||||||
|
|
||||||
// 获取所有依赖资源
|
|
||||||
List<BuildAssetInfo> depends = GetAllDependencies(mainAssetPath);
|
|
||||||
for (int i = 0; i < depends.Count; i++)
|
|
||||||
{
|
|
||||||
string assetPath = depends[i].AssetPath;
|
|
||||||
|
|
||||||
// 如果已经存在,则增加该资源的依赖计数
|
|
||||||
if (buildAssetDic.ContainsKey(assetPath))
|
|
||||||
buildAssetDic[assetPath].DependCount++;
|
|
||||||
else
|
|
||||||
buildAssetDic.Add(assetPath, depends[i]);
|
|
||||||
|
|
||||||
// 添加资源标记
|
|
||||||
buildAssetDic[assetPath].AddAssetTags(collectInfo.AssetTags);
|
|
||||||
|
|
||||||
// 注意:检测是否为主动收集资源
|
|
||||||
if (assetPath == mainAssetPath)
|
|
||||||
{
|
|
||||||
buildAssetDic[mainAssetPath].IsCollectAsset = true;
|
|
||||||
buildAssetDic[mainAssetPath].IsRawAsset = collectInfo.IsRawAsset;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 添加所有的依赖资源列表
|
|
||||||
// 注意:不包括自己
|
|
||||||
var allDependAssetInfos = new List<BuildAssetInfo>(depends.Count);
|
|
||||||
for (int i = 0; i < depends.Count; i++)
|
|
||||||
{
|
|
||||||
string assetPath = depends[i].AssetPath;
|
|
||||||
if (assetPath != mainAssetPath)
|
|
||||||
allDependAssetInfos.Add(buildAssetDic[assetPath]);
|
|
||||||
}
|
|
||||||
buildAssetDic[mainAssetPath].SetAllDependAssetInfos(allDependAssetInfos);
|
|
||||||
|
|
||||||
EditorTools.DisplayProgressBar("依赖文件分析", ++progressValue, allCollectInfos.Count);
|
|
||||||
}
|
|
||||||
EditorTools.ClearProgressBar();
|
|
||||||
|
|
||||||
// 3. 记录参与构建的资源总数
|
|
||||||
buildMapContext.AssetFileCount = buildAssetDic.Values.Count;
|
|
||||||
|
|
||||||
// 4. 移除零依赖的资源
|
|
||||||
var redundancyServices = buildParameters.Parameters.RedundancyServices;
|
|
||||||
List<BuildAssetInfo> undependentAssets = new List<BuildAssetInfo>();
|
|
||||||
foreach (KeyValuePair<string, BuildAssetInfo> pair in buildAssetDic)
|
|
||||||
{
|
|
||||||
var buildAssetInfo = pair.Value;
|
|
||||||
if (buildAssetInfo.IsCollectAsset)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
// 零依赖资源
|
|
||||||
if (buildAssetInfo.DependCount == 0)
|
|
||||||
{
|
|
||||||
undependentAssets.Add(buildAssetInfo);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 冗余扩展
|
|
||||||
if (redundancyServices != null && redundancyServices.Check(buildAssetInfo.AssetPath))
|
|
||||||
{
|
|
||||||
undependentAssets.Add(buildAssetInfo);
|
|
||||||
buildMapContext.RedundancyAssetList.Add(buildAssetInfo.AssetPath);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果没有开启自动分包,没有被收集到的资源会造成冗余
|
|
||||||
if (buildParameters.Parameters.EnableAutoCollect == false)
|
|
||||||
{
|
|
||||||
if (AssetBundleCollectorSettingData.HasCollector(buildAssetInfo.AssetPath) == false)
|
|
||||||
{
|
|
||||||
undependentAssets.Add(buildAssetInfo);
|
|
||||||
buildMapContext.RedundancyAssetList.Add(buildAssetInfo.AssetPath);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
foreach (var assetInfo in undependentAssets)
|
|
||||||
{
|
|
||||||
buildAssetDic.Remove(assetInfo.AssetPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 5. 设置资源包名
|
|
||||||
progressValue = 0;
|
|
||||||
foreach (KeyValuePair<string, BuildAssetInfo> pair in buildAssetDic)
|
|
||||||
{
|
|
||||||
var assetInfo = pair.Value;
|
|
||||||
var bundleLabel = AssetBundleCollectorSettingData.GetBundleLabel(assetInfo.AssetPath);
|
|
||||||
if (assetInfo.IsRawAsset)
|
|
||||||
assetInfo.SetBundleLabelAndVariant(bundleLabel, YooAssetSettingsData.Setting.RawFileVariant);
|
|
||||||
else
|
|
||||||
assetInfo.SetBundleLabelAndVariant(bundleLabel, YooAssetSettingsData.Setting.AssetBundleFileVariant);
|
|
||||||
EditorTools.DisplayProgressBar("设置资源包名", ++progressValue, buildAssetDic.Count);
|
|
||||||
}
|
|
||||||
EditorTools.ClearProgressBar();
|
|
||||||
|
|
||||||
// 6. 构建资源包
|
|
||||||
var allAssets = buildAssetDic.Values.ToList();
|
|
||||||
if (allAssets.Count == 0)
|
|
||||||
throw new Exception("构建的资源列表不能为空");
|
|
||||||
foreach (var assetInfo in allAssets)
|
|
||||||
{
|
|
||||||
buildMapContext.PackAsset(assetInfo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 获取指定资源依赖的所有资源列表
|
|
||||||
/// 注意:返回列表里已经包括主资源自己
|
|
||||||
/// </summary>
|
|
||||||
private List<BuildAssetInfo> GetAllDependencies(string mainAssetPath)
|
|
||||||
{
|
|
||||||
List<BuildAssetInfo> result = new List<BuildAssetInfo>();
|
|
||||||
string[] depends = AssetDatabase.GetDependencies(mainAssetPath, true);
|
|
||||||
foreach (string assetPath in depends)
|
|
||||||
{
|
|
||||||
if (AssetBundleCollectorSettingData.IsValidateAsset(assetPath))
|
|
||||||
{
|
|
||||||
BuildAssetInfo assetInfo = new BuildAssetInfo(assetPath);
|
|
||||||
result.Add(assetInfo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 检测构建结果
|
/// 检测构建结果
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -25,10 +25,6 @@ namespace YooAsset.Editor
|
||||||
if (string.IsNullOrEmpty(buildParameters.PipelineOutputDirectory))
|
if (string.IsNullOrEmpty(buildParameters.PipelineOutputDirectory))
|
||||||
throw new Exception("输出目录不能为空");
|
throw new Exception("输出目录不能为空");
|
||||||
|
|
||||||
// 检测资源收集配置文件
|
|
||||||
if (AssetBundleCollectorSettingData.GetCollecterCount() == 0)
|
|
||||||
throw new Exception("配置的资源收集路径为空");
|
|
||||||
|
|
||||||
// 增量更新时候的必要检测
|
// 增量更新时候的必要检测
|
||||||
if (buildParameters.Parameters.ForceRebuild == false)
|
if (buildParameters.Parameters.ForceRebuild == false)
|
||||||
{
|
{
|
||||||
|
@ -46,10 +42,10 @@ namespace YooAsset.Editor
|
||||||
if (Directory.Exists(packageDirectory))
|
if (Directory.Exists(packageDirectory))
|
||||||
throw new Exception($"补丁包已经存在:{packageDirectory}");
|
throw new Exception($"补丁包已经存在:{packageDirectory}");
|
||||||
|
|
||||||
// 检测内置资源标记是否一致
|
// 检测内置资源分类标签是否一致
|
||||||
PatchManifest oldPatchManifest = AssetBundleBuilderHelper.LoadPatchManifestFile(buildParameters.PipelineOutputDirectory);
|
PatchManifest oldPatchManifest = AssetBundleBuilderHelper.LoadPatchManifestFile(buildParameters.PipelineOutputDirectory);
|
||||||
if (buildParameters.Parameters.BuildinTags != oldPatchManifest.BuildinTags)
|
if (buildParameters.Parameters.BuildinTags != oldPatchManifest.BuildinTags)
|
||||||
throw new Exception($"增量更新时内置资源标记必须一致:{buildParameters.Parameters.BuildinTags} != {oldPatchManifest.BuildinTags}");
|
throw new Exception($"增量更新时内置资源标签必须一致:{buildParameters.Parameters.BuildinTags} != {oldPatchManifest.BuildinTags}");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 如果是强制重建
|
// 如果是强制重建
|
||||||
|
|
Loading…
Reference in New Issue