2026-01-07 18:20:13 +08:00
|
|
|
|
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打包其余文件
|
2026-01-08 12:25:29 +08:00
|
|
|
|
|
2026-01-07 18:20:13 +08:00
|
|
|
|
Debug.Log("开始使用RawFileBuildPipeline打包视频文件...");
|
|
|
|
|
|
var rawBuildResult = BuildRawFiles();
|
|
|
|
|
|
if (!rawBuildResult.Success)
|
|
|
|
|
|
{
|
2026-03-18 10:29:55 +08:00
|
|
|
|
Debug.LogWarning("视频文件打包失败!");
|
2026-01-07 18:20:13 +08:00
|
|
|
|
return;
|
|
|
|
|
|
}
|
2026-01-08 12:25:29 +08:00
|
|
|
|
|
2026-01-07 18:20:13 +08:00
|
|
|
|
Debug.Log("混合打包完成!");
|
|
|
|
|
|
base.ExecuteBuild();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private BuildResult BuildRawFiles()
|
|
|
|
|
|
{
|
|
|
|
|
|
var rawPackageName = $"{packageName}_RawFile";
|
2026-01-08 12:25:29 +08:00
|
|
|
|
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);
|
2026-01-07 18:20:13 +08:00
|
|
|
|
|
2026-01-08 12:25:29 +08:00
|
|
|
|
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
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
2026-01-07 18:20:13 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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);
|
2026-01-08 12:25:29 +08:00
|
|
|
|
|
|
|
|
|
|
var clearBuildCache =
|
|
|
|
|
|
AssetBundleBuilderSetting.GetPackageClearBuildCache(packageName, selectedBuildPipelines);
|
2026-01-07 18:20:13 +08:00
|
|
|
|
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();
|
2026-01-08 12:25:29 +08:00
|
|
|
|
|
|
|
|
|
|
|
2026-01-07 18:20:13 +08:00
|
|
|
|
ScriptableBuildPipeline pipeline = new ScriptableBuildPipeline();
|
|
|
|
|
|
var result = pipeline.Run(buildParameters, true);
|
2026-01-08 12:25:29 +08:00
|
|
|
|
|
2026-01-07 18:20:13 +08:00
|
|
|
|
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();
|
|
|
|
|
|
// }
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|