Files
plugin-library/Assets/00.StaryEvoTools/Editor/BuildAsset/PipelineViewer/MixedBuildPipelineViewer.cs
2026-03-18 10:29:55 +08:00

171 lines
7.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.IO;
using UnityEditor;
using UnityEngine;
using YooAsset;
using YooAsset.Editor;
namespace Stary.Evo.Editor
{
[Serializable]
public class MixedBuildPipelineViewer : AbstractBuildPipelineViewer
{
public MixedBuildPipelineViewer(string packageName, string selectedBuildPipelines, string packageVersion) :
base(packageName, selectedBuildPipelines, packageVersion)
{
}
public override void ExecuteBuild()
{
// 1. 首先使用RawFileBuildPipeline打包视频文件
Debug.Log("开始使用ScriptableBuildPipeline打包其余文件...");
var scriptableBuildResult = BuildOtherFiles();
if (!scriptableBuildResult.Success)
{
Debug.LogError("其余文件打包失败!");
return;
}
// 2. 然后使用ScriptableBuildPipeline打包其余文件
Debug.Log("开始使用RawFileBuildPipeline打包视频文件...");
var rawBuildResult = BuildRawFiles();
if (!rawBuildResult.Success)
{
Debug.LogWarning("视频文件打包失败!");
return;
}
Debug.Log("混合打包完成!");
base.ExecuteBuild();
}
private BuildResult BuildRawFiles()
{
var rawPackageName = $"{packageName}_RawFile";
var package = AssetBundleCollectorSettingData.Setting.GetPackage(rawPackageName);
int count = 0;
foreach (var group in package.Groups)
{
foreach (var collector in group.Collectors)
{
count++;
}
}
if (count > 0)
{
var fileNameStyle =
AssetBundleBuilderSetting.GetPackageFileNameStyle(packageName, selectedBuildPipelines);
var buildinFileCopyOption =
AssetBundleBuilderSetting.GetPackageBuildinFileCopyOption(packageName, selectedBuildPipelines);
var buildinFileCopyParams =
AssetBundleBuilderSetting.GetPackageBuildinFileCopyParams(packageName, selectedBuildPipelines);
var clearBuildCache =
AssetBundleBuilderSetting.GetPackageClearBuildCache(packageName, selectedBuildPipelines);
var useAssetDependencyDB =
AssetBundleBuilderSetting.GetPackageUseAssetDependencyDB(packageName, selectedBuildPipelines);
RawFileBuildParameters buildParameters = new RawFileBuildParameters();
buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot();
buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot();
buildParameters.BuildPipeline = selectedBuildPipelines;
buildParameters.BuildBundleType = (int)EBuildBundleType.RawBundle;
buildParameters.BuildTarget = EditorUserBuildSettings.activeBuildTarget;
buildParameters.PackageName = rawPackageName;
buildParameters.PackageVersion = packageVersion;
buildParameters.VerifyBuildingResult = true;
buildParameters.FileNameStyle = fileNameStyle;
buildParameters.BuildinFileCopyOption = buildinFileCopyOption;
buildParameters.BuildinFileCopyParams = buildinFileCopyParams;
buildParameters.ClearBuildCacheFiles = clearBuildCache;
buildParameters.UseAssetDependencyDB = useAssetDependencyDB;
buildParameters.EncryptionServices = CreateEncryptionInstance();
// SetVideoGroupActive(true);
RawFileBuildPipeline pipeline = new RawFileBuildPipeline();
return pipeline.Run(buildParameters, true);
}
else
{
return new BuildResult()
{
Success = false
};
}
}
private BuildResult BuildOtherFiles()
{
var fileNameStyle = AssetBundleBuilderSetting.GetPackageFileNameStyle(packageName, selectedBuildPipelines);
var buildinFileCopyOption =
AssetBundleBuilderSetting.GetPackageBuildinFileCopyOption(packageName, selectedBuildPipelines);
var buildinFileCopyParams =
AssetBundleBuilderSetting.GetPackageBuildinFileCopyParams(packageName, selectedBuildPipelines);
var compressOption =
AssetBundleBuilderSetting.GetPackageCompressOption(packageName, selectedBuildPipelines);
var useAssetDependencyDB =
AssetBundleBuilderSetting.GetPackageUseAssetDependencyDB(packageName, selectedBuildPipelines);
var clearBuildCache =
AssetBundleBuilderSetting.GetPackageClearBuildCache(packageName, selectedBuildPipelines);
var builtinShaderBundleName = GetBuiltinShaderBundleName();
ScriptableBuildParameters buildParameters = new ScriptableBuildParameters();
buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot();
buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot();
buildParameters.BuildPipeline = selectedBuildPipelines;
buildParameters.BuildBundleType = (int)EBuildBundleType.AssetBundle;
buildParameters.BuildTarget = EditorUserBuildSettings.activeBuildTarget;
buildParameters.PackageName = packageName;
buildParameters.PackageVersion = packageVersion;
buildParameters.EnableSharePackRule = true;
buildParameters.VerifyBuildingResult = true;
buildParameters.FileNameStyle = fileNameStyle;
buildParameters.BuildinFileCopyOption = buildinFileCopyOption;
buildParameters.BuildinFileCopyParams = buildinFileCopyParams;
buildParameters.CompressOption = compressOption;
buildParameters.ClearBuildCacheFiles = clearBuildCache;
buildParameters.UseAssetDependencyDB = useAssetDependencyDB;
buildParameters.BuiltinShadersBundleName = builtinShaderBundleName;
buildParameters.EncryptionServices = CreateEncryptionInstance();
ScriptableBuildPipeline pipeline = new ScriptableBuildPipeline();
var result = pipeline.Run(buildParameters, true);
return result;
}
// private void SetVideoGroupActive(bool isActive)
// {
// var setting = YooAsset.Editor.AssetBundleCollectorSettingData.Setting;
// if (setting == null)
// {
// Debug.LogError("UnityEvo: 打包设置获取失败请检查AssetBundleCollectorSettingData设置");
// return;
// }
//
// // 使用LINQ简化Package查找
// var collectorPackage = setting.Packages.Find(p => p.PackageName == packageName);
// if (collectorPackage == null)
// {
// Debug.LogError($"UnityEvo: 打包视频文件失败【{packageName}】...未找到对应的Package文件请检查");
// return;
// }
//
// // 定义激活和禁用规则名称
// string enableRule = nameof(EnableGroup);
// string disableRule = nameof(DisableGroup);
//
// // 遍历所有组并设置激活规则
// foreach (var group in collectorPackage.Groups)
// {
// // 使用三元运算符简化逻辑,减少重复代码
// bool shouldEnableGroup = group.GroupName == "Video" ? isActive : !isActive;
// group.ActiveRuleName = shouldEnableGroup ? enableRule : disableRule;
// }
//
// YooAsset.Editor.AssetBundleCollectorSettingData.SaveFile();
// }
}
}