#if UNITY_2019_4_OR_NEWER using System; using System.IO; using System.Linq; using System.Collections.Generic; using UnityEditor; using UnityEngine; using UnityEditor.UIElements; using UnityEngine.UIElements; namespace YooAsset.Editor { [BuildPipelineAttribute(nameof(EBuildPipeline.ScriptableBuildPipeline))] internal class ScriptableBuildPipelineViewer : BuildPipelineViewerBase { protected TemplateContainer Root; protected TextField _buildOutputField; protected TextField _buildVersionField; protected PopupField _encryptionServicesField; protected PopupField _manifestProcessServicesField; protected PopupField _manifestRestoreServicesField; protected EnumField _compressionField; protected EnumField _outputNameStyleField; protected EnumField _copyBuildinFileOptionField; protected TextField _copyBuildinFileTagsField; protected Toggle _clearBuildCacheToggle; protected Toggle _useAssetDependencyDBToggle; public override void CreateView(VisualElement parent) { // 加载布局文件 var visualAsset = UxmlLoader.LoadWindowUXML(); if (visualAsset == null) return; Root = visualAsset.CloneTree(); Root.style.flexGrow = 1f; parent.Add(Root); // 输出目录 _buildOutputField = Root.Q("BuildOutput"); SetBuildOutputField(_buildOutputField); // 构建版本 _buildVersionField = Root.Q("BuildVersion"); SetBuildVersionField(_buildVersionField); // 加密方法 var popupContainer = Root.Q("PopupContainer"); _encryptionServicesField = CreateEncryptionServicesField(popupContainer); _manifestProcessServicesField = CreateManifestProcessServicesField(popupContainer); _manifestRestoreServicesField = CreateManifestRestoreServicesField(popupContainer); // 压缩方式选项 _compressionField = Root.Q("Compression"); SetCompressionField(_compressionField); // 输出文件名称样式 _outputNameStyleField = Root.Q("FileNameStyle"); SetOutputNameStyleField(_outputNameStyleField); // 首包文件拷贝参数 _copyBuildinFileTagsField = Root.Q("CopyBuildinFileParam"); SetCopyBuildinFileTagsField(_copyBuildinFileTagsField); SetCopyBuildinFileTagsVisible(_copyBuildinFileTagsField); // 首包文件拷贝选项 _copyBuildinFileOptionField = Root.Q("CopyBuildinFileOption"); SetCopyBuildinFileOptionField(_copyBuildinFileOptionField, _copyBuildinFileTagsField); // 清理构建缓存 _clearBuildCacheToggle = Root.Q("ClearBuildCache"); SetClearBuildCacheToggle(_clearBuildCacheToggle); // 使用资源依赖数据库 _useAssetDependencyDBToggle = Root.Q("UseAssetDependency"); SetUseAssetDependencyDBToggle(_useAssetDependencyDBToggle); // 构建按钮 var buildButton = Root.Q