【m】框架优化

This commit is contained in:
zhangzheng
2026-01-07 18:20:13 +08:00
parent 8ef57d9079
commit cd1207a99a
48 changed files with 2624 additions and 1453 deletions

View File

@@ -0,0 +1,149 @@
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.LogError("视频文件打包失败!");
return;
}
Debug.Log("混合打包完成!");
base.ExecuteBuild();
}
private BuildResult BuildRawFiles()
{
var rawPackageName = $"{packageName}_RawFile";
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);
}
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();
// }
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: c0023f14896b4a189fd6e7c7d4d6072b
timeCreated: 1767687803

View File

@@ -40,7 +40,6 @@ namespace Stary.Evo.Editor
buildParameters.ClearBuildCacheFiles = clearBuildCache;
buildParameters.UseAssetDependencyDB = useAssetDependencyDB;
buildParameters.EncryptionServices = CreateEncryptionInstance();
RawFileBuildPipeline pipeline = new RawFileBuildPipeline();
var buildResult = pipeline.Run(buildParameters, true);
if (buildResult.Success)