update assetbundle builder

pull/418/head
何冠峰 2024-12-24 17:35:26 +08:00
parent 16344393a1
commit 6d6fd3af2c
8 changed files with 74 additions and 39 deletions

View File

@ -11,28 +11,39 @@ namespace YooAsset.Editor
public static EditorSimulateBuildResult SimulateBuild(EditorSimulateBuildParam buildParam) public static EditorSimulateBuildResult SimulateBuild(EditorSimulateBuildParam buildParam)
{ {
string packageName = buildParam.PackageName; string packageName = buildParam.PackageName;
var buildParameters = new EditorSimulateBuildParameters(); string buildPipelineName = buildParam.BuildPipelineName;
buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot();
buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot();
buildParameters.BuildPipeline = EBuildPipeline.EditorSimulateBuildPipeline.ToString();
buildParameters.BuildTarget = EditorUserBuildSettings.activeBuildTarget;
buildParameters.PackageName = packageName;
buildParameters.PackageVersion = "Simulate";
buildParameters.FileNameStyle = EFileNameStyle.HashName;
buildParameters.BuildinFileCopyOption = EBuildinFileCopyOption.None;
buildParameters.BuildinFileCopyParams = string.Empty;
var pipeline = new EditorSimulateBuildPipeline(); if (buildPipelineName == "EditorSimulateBuildPipeline")
BuildResult buildResult = pipeline.Run(buildParameters, false);
if (buildResult.Success)
{ {
var reulst = new EditorSimulateBuildResult(); var buildParameters = new EditorSimulateBuildParameters();
reulst.PackageRootDirectory = buildResult.OutputPackageDirectory; buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot();
return reulst; buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot();
buildParameters.BuildPipeline = EBuildPipeline.EditorSimulateBuildPipeline.ToString();
buildParameters.BuildBundleType = (int)EBuildBundleType.VirtualBundle;
buildParameters.BuildTarget = EditorUserBuildSettings.activeBuildTarget;
buildParameters.PackageName = packageName;
buildParameters.PackageVersion = "Simulate";
buildParameters.FileNameStyle = EFileNameStyle.HashName;
buildParameters.BuildinFileCopyOption = EBuildinFileCopyOption.None;
buildParameters.BuildinFileCopyParams = string.Empty;
var pipeline = new EditorSimulateBuildPipeline();
BuildResult buildResult = pipeline.Run(buildParameters, false);
if (buildResult.Success)
{
var reulst = new EditorSimulateBuildResult();
reulst.PackageRootDirectory = buildResult.OutputPackageDirectory;
return reulst;
}
else
{
Debug.LogError(buildResult.ErrorInfo);
throw new System.Exception($"{nameof(EditorSimulateBuildPipeline)} build failed !");
}
} }
else else
{ {
return null; throw new System.NotImplementedException(buildPipelineName);
} }
} }
} }

View File

@ -22,10 +22,15 @@ namespace YooAsset.Editor
public string BuildinFileRoot; public string BuildinFileRoot;
/// <summary> /// <summary>
/// 构建管线 /// 构建管线名称
/// </summary> /// </summary>
public string BuildPipeline; public string BuildPipeline;
/// <summary>
/// 构建资源包类型
/// </summary>
public int BuildBundleType;
/// <summary> /// <summary>
/// 构建的平台 /// 构建的平台
/// </summary> /// </summary>

View File

@ -12,7 +12,7 @@ namespace YooAsset.Editor
public abstract class TaskCreateManifest public abstract class TaskCreateManifest
{ {
private readonly Dictionary<string, int> _cachedBundleID = new Dictionary<string, int>(10000); private readonly Dictionary<string, int> _cachedBundleIndexIDs = new Dictionary<string, int>(10000);
private readonly Dictionary<int, HashSet<string>> _cacheBundleTags = new Dictionary<int, HashSet<string>>(10000); private readonly Dictionary<int, HashSet<string>> _cacheBundleTags = new Dictionary<int, HashSet<string>>(10000);
/// <summary> /// <summary>
@ -35,12 +35,16 @@ namespace YooAsset.Editor
manifest.LocationToLower = buildMapContext.Command.LocationToLower; manifest.LocationToLower = buildMapContext.Command.LocationToLower;
manifest.IncludeAssetGUID = buildMapContext.Command.IncludeAssetGUID; manifest.IncludeAssetGUID = buildMapContext.Command.IncludeAssetGUID;
manifest.OutputNameStyle = (int)buildParameters.FileNameStyle; manifest.OutputNameStyle = (int)buildParameters.FileNameStyle;
manifest.BuildBundleType = buildParameters.BuildBundleType;
manifest.BuildPipeline = buildParameters.BuildPipeline; manifest.BuildPipeline = buildParameters.BuildPipeline;
manifest.PackageName = buildParameters.PackageName; manifest.PackageName = buildParameters.PackageName;
manifest.PackageVersion = buildParameters.PackageVersion; manifest.PackageVersion = buildParameters.PackageVersion;
manifest.PackageNote = buildParameters.PackageNote; manifest.PackageNote = buildParameters.PackageNote;
manifest.BundleList = GetAllPackageBundle(buildMapContext); manifest.AssetList = CreatePackageAssetList(buildMapContext);
manifest.AssetList = GetAllPackageAsset(buildMapContext); manifest.BundleList = CreatePackageBundleList(buildMapContext);
// 处理资源清单的ID数据
ProcessPacakgeIDs(manifest);
// 处理资源包的依赖列表 // 处理资源包的依赖列表
if (processBundleDepends) if (processBundleDepends)
@ -118,9 +122,9 @@ namespace YooAsset.Editor
protected abstract string[] GetBundleDepends(BuildContext context, string bundleName); protected abstract string[] GetBundleDepends(BuildContext context, string bundleName);
/// <summary> /// <summary>
/// 获取主资源对象列表 /// 创建资源对象列表
/// </summary> /// </summary>
private List<PackageAsset> GetAllPackageAsset(BuildMapContext buildMapContext) private List<PackageAsset> CreatePackageAssetList(BuildMapContext buildMapContext)
{ {
List<PackageAsset> result = new List<PackageAsset>(1000); List<PackageAsset> result = new List<PackageAsset>(1000);
foreach (var bundleInfo in buildMapContext.Collection) foreach (var bundleInfo in buildMapContext.Collection)
@ -133,7 +137,7 @@ namespace YooAsset.Editor
packageAsset.AssetPath = assetInfo.AssetInfo.AssetPath; packageAsset.AssetPath = assetInfo.AssetInfo.AssetPath;
packageAsset.AssetGUID = buildMapContext.Command.IncludeAssetGUID ? assetInfo.AssetInfo.AssetGUID : string.Empty; packageAsset.AssetGUID = buildMapContext.Command.IncludeAssetGUID ? assetInfo.AssetInfo.AssetGUID : string.Empty;
packageAsset.AssetTags = assetInfo.AssetTags.ToArray(); packageAsset.AssetTags = assetInfo.AssetTags.ToArray();
packageAsset.BundleID = GetCachedBundleID(assetInfo.BundleName); packageAsset.BundleNameInEditor = assetInfo.BundleName;
result.Add(packageAsset); result.Add(packageAsset);
} }
} }
@ -144,9 +148,9 @@ namespace YooAsset.Editor
} }
/// <summary> /// <summary>
/// 获取资源包列表 /// 创建资源包列表
/// </summary> /// </summary>
private List<PackageBundle> GetAllPackageBundle(BuildMapContext buildMapContext) private List<PackageBundle> CreatePackageBundleList(BuildMapContext buildMapContext)
{ {
List<PackageBundle> result = new List<PackageBundle>(1000); List<PackageBundle> result = new List<PackageBundle>(1000);
foreach (var bundleInfo in buildMapContext.Collection) foreach (var bundleInfo in buildMapContext.Collection)
@ -154,18 +158,29 @@ namespace YooAsset.Editor
var packageBundle = bundleInfo.CreatePackageBundle(); var packageBundle = bundleInfo.CreatePackageBundle();
result.Add(packageBundle); result.Add(packageBundle);
} }
// 按照BundleName排序 // 按照BundleName排序
result.Sort((a, b) => a.BundleName.CompareTo(b.BundleName)); result.Sort((a, b) => a.BundleName.CompareTo(b.BundleName));
return result;
}
// 注意:缓存资源包索引 /// <summary>
for (int index = 0; index < result.Count; index++) /// 处理资源清单的ID数据
/// </summary>
private void ProcessPacakgeIDs(PackageManifest manifest)
{
// 注意:优先缓存资源包索引
for (int index = 0; index < manifest.BundleList.Count; index++)
{ {
string bundleName = result[index].BundleName; string bundleName = manifest.BundleList[index].BundleName;
_cachedBundleID.Add(bundleName, index); _cachedBundleIndexIDs.Add(bundleName, index);
} }
return result; foreach (var packageAsset in manifest.AssetList)
{
string bundleName = packageAsset.BundleNameInEditor;
packageAsset.BundleID = GetCachedBundleIndexID(bundleName);
}
} }
/// <summary> /// <summary>
@ -176,12 +191,12 @@ namespace YooAsset.Editor
// 查询引擎生成的资源包依赖关系,然后记录到清单 // 查询引擎生成的资源包依赖关系,然后记录到清单
foreach (var packageBundle in manifest.BundleList) foreach (var packageBundle in manifest.BundleList)
{ {
int mainBundleID = GetCachedBundleID(packageBundle.BundleName); int mainBundleID = GetCachedBundleIndexID(packageBundle.BundleName);
var depends = GetBundleDepends(context, packageBundle.BundleName); var depends = GetBundleDepends(context, packageBundle.BundleName);
List<int> dependIDs = new List<int>(depends.Length); List<int> dependIDs = new List<int>(depends.Length);
foreach (var dependBundleName in depends) foreach (var dependBundleName in depends)
{ {
int bundleID = GetCachedBundleID(dependBundleName); int bundleID = GetCachedBundleIndexID(dependBundleName);
if (bundleID != mainBundleID) if (bundleID != mainBundleID)
dependIDs.Add(bundleID); dependIDs.Add(bundleID);
} }
@ -239,13 +254,13 @@ namespace YooAsset.Editor
} }
/// <summary> /// <summary>
/// 获取资源包的索引ID /// 获取缓存的资源包的索引ID
/// </summary> /// </summary>
private int GetCachedBundleID(string bundleName) private int GetCachedBundleIndexID(string bundleName)
{ {
if (_cachedBundleID.TryGetValue(bundleName, out int value) == false) if (_cachedBundleIndexIDs.TryGetValue(bundleName, out int value) == false)
{ {
throw new Exception($"Should never get here ! Not found bundle ID : {bundleName}"); throw new Exception($"Should never get here ! Not found bundle index ID : {bundleName}");
} }
return value; return value;
} }

View File

@ -9,7 +9,7 @@ namespace YooAsset.Editor
public BuildResult Run(BuildParameters buildParameters, bool enableLog) public BuildResult Run(BuildParameters buildParameters, bool enableLog)
{ {
if (buildParameters is BuiltinBuildParameters) if (buildParameters is BuiltinBuildParameters)
{ {
AssetBundleBuilder builder = new AssetBundleBuilder(); AssetBundleBuilder builder = new AssetBundleBuilder();
return builder.Run(buildParameters, GetDefaultBuildPipeline(), enableLog); return builder.Run(buildParameters, GetDefaultBuildPipeline(), enableLog);
} }

View File

@ -33,6 +33,7 @@ namespace YooAsset.Editor
buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot(); buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot();
buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot(); buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot();
buildParameters.BuildPipeline = BuildPipeline.ToString(); buildParameters.BuildPipeline = BuildPipeline.ToString();
buildParameters.BuildBundleType = (int)EBuildBundleType.AssetBundle;
buildParameters.BuildTarget = BuildTarget; buildParameters.BuildTarget = BuildTarget;
buildParameters.PackageName = PackageName; buildParameters.PackageName = PackageName;
buildParameters.PackageVersion = GetPackageVersion(); buildParameters.PackageVersion = GetPackageVersion();

View File

@ -50,6 +50,7 @@ namespace YooAsset.Editor
buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot(); buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot();
buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot(); buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot();
buildParameters.BuildPipeline = BuildPipeline.ToString(); buildParameters.BuildPipeline = BuildPipeline.ToString();
buildParameters.BuildBundleType = (int)EBuildBundleType.VirtualBundle;
buildParameters.BuildTarget = BuildTarget; buildParameters.BuildTarget = BuildTarget;
buildParameters.PackageName = PackageName; buildParameters.PackageName = PackageName;
buildParameters.PackageVersion = GetPackageVersion(); buildParameters.PackageVersion = GetPackageVersion();

View File

@ -34,6 +34,7 @@ namespace YooAsset.Editor
buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot(); buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot();
buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot(); buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot();
buildParameters.BuildPipeline = BuildPipeline.ToString(); buildParameters.BuildPipeline = BuildPipeline.ToString();
buildParameters.BuildBundleType = (int)EBuildBundleType.RawBundle;
buildParameters.BuildTarget = BuildTarget; buildParameters.BuildTarget = BuildTarget;
buildParameters.PackageName = PackageName; buildParameters.PackageName = PackageName;
buildParameters.PackageVersion = GetPackageVersion(); buildParameters.PackageVersion = GetPackageVersion();

View File

@ -33,6 +33,7 @@ namespace YooAsset.Editor
buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot(); buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot();
buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot(); buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot();
buildParameters.BuildPipeline = BuildPipeline.ToString(); buildParameters.BuildPipeline = BuildPipeline.ToString();
buildParameters.BuildBundleType = (int)EBuildBundleType.AssetBundle;
buildParameters.BuildTarget = BuildTarget; buildParameters.BuildTarget = BuildTarget;
buildParameters.PackageName = PackageName; buildParameters.PackageName = PackageName;
buildParameters.PackageVersion = GetPackageVersion(); buildParameters.PackageVersion = GetPackageVersion();