1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- using System;
- using System.IO;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEditor;
- namespace YooAsset.Editor
- {
- [TaskAttribute("资源构建准备工作")]
- public class TaskPrepare : IBuildTask
- {
- void IBuildTask.Run(BuildContext context)
- {
- var buildParameters = context.GetContextObject<BuildParametersContext>();
- buildParameters.BeginWatch();
- var buildMode = buildParameters.Parameters.BuildMode;
- // 检测构建平台是否合法
- if (buildParameters.Parameters.BuildTarget == BuildTarget.NoTarget)
- throw new Exception("请选择目标平台");
- // 检测构建版本是否合法
- if (buildParameters.Parameters.BuildVersion <= 0)
- throw new Exception("请先设置版本号");
- // 检测输出目录是否为空
- if (string.IsNullOrEmpty(buildParameters.PipelineOutputDirectory))
- throw new Exception("输出目录不能为空");
- if (buildMode != EBuildMode.SimulateBuild)
- {
- // 检测当前是否正在构建资源包
- if (BuildPipeline.isBuildingPlayer)
- throw new Exception("当前正在构建资源包,请结束后再试");
- // 检测是否有未保存场景
- if (EditorTools.HasDirtyScenes())
- throw new Exception("检测到未保存的场景文件");
- // 保存改动的资源
- AssetDatabase.SaveAssets();
- }
- // 增量更新时候的必要检测
- if (buildMode == EBuildMode.IncrementalBuild)
- {
- // 检测历史版本是否存在
- if (AssetBundleBuilderHelper.HasAnyPackageVersion(buildParameters.Parameters.BuildTarget, buildParameters.Parameters.OutputRoot))
- {
- // 检测构建版本是否合法
- int maxPackageVersion = AssetBundleBuilderHelper.GetMaxPackageVersion(buildParameters.Parameters.BuildTarget, buildParameters.Parameters.OutputRoot);
- if (buildParameters.Parameters.BuildVersion <= maxPackageVersion)
- throw new Exception("构建版本不能小于历史版本");
- // 检测补丁包是否已经存在
- string packageDirectory = buildParameters.GetPackageDirectory();
- if (Directory.Exists(packageDirectory))
- throw new Exception($"补丁包已经存在:{packageDirectory}");
- // 检测内置资源分类标签是否一致
- var oldPatchManifest = AssetBundleBuilderHelper.GetOldPatchManifest(buildParameters.PipelineOutputDirectory);
- if (buildParameters.Parameters.BuildinTags != oldPatchManifest.BuildinTags)
- throw new Exception($"增量更新时内置资源标签必须一致:{buildParameters.Parameters.BuildinTags} != {oldPatchManifest.BuildinTags}");
- }
- }
- // 如果是强制重建
- if (buildMode == EBuildMode.ForceRebuild)
- {
- // 删除平台总目录
- string platformDirectory = $"{buildParameters.Parameters.OutputRoot}/{buildParameters.Parameters.BuildTarget}";
- if (EditorTools.DeleteDirectory(platformDirectory))
- {
- BuildRunner.Log($"删除平台总目录:{platformDirectory}");
- }
- }
- // 如果输出目录不存在
- if (EditorTools.CreateDirectory(buildParameters.PipelineOutputDirectory))
- {
- BuildRunner.Log($"创建输出目录:{buildParameters.PipelineOutputDirectory}");
- }
- }
- }
- }
|