From 29a8705ef823c650b9eff5cea28a24d1f32d05fe Mon Sep 17 00:00:00 2001 From: Alienjack Date: Wed, 3 Sep 2025 18:57:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=89=93=E5=8C=85=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E9=A1=B5=EF=BC=8C=E5=B0=86=E5=8E=9F=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E9=A1=B5=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E7=A7=BB=E5=8A=A8=E5=88=B0=E6=89=93=E5=8C=85=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../VersionFlow/Editor/InspectorEditors.meta | 8 + .../InspectorEditors/BuilderConfigEditor.cs | 67 +++ .../BuilderConfigEditor.cs.meta | 0 .../PackEditor.cs} | 380 ++++++++---------- .../InspectorEditors/PackEditor.cs.meta | 11 + .../VersionFlowSettingEditor.cs | 0 .../VersionFlowSettingEditor.cs.meta | 0 .../VersionFlow/Editor/SetupInstallBundle.cs | 2 +- .../Editor/VersionFlowSettingWnd.cs | 5 + 9 files changed, 259 insertions(+), 214 deletions(-) create mode 100644 Assets/VersionFlow/Editor/InspectorEditors.meta create mode 100644 Assets/VersionFlow/Editor/InspectorEditors/BuilderConfigEditor.cs rename Assets/VersionFlow/Editor/{ => InspectorEditors}/BuilderConfigEditor.cs.meta (100%) rename Assets/VersionFlow/Editor/{BuilderConfigEditor.cs => InspectorEditors/PackEditor.cs} (88%) create mode 100644 Assets/VersionFlow/Editor/InspectorEditors/PackEditor.cs.meta rename Assets/VersionFlow/Editor/{ => InspectorEditors}/VersionFlowSettingEditor.cs (100%) rename Assets/VersionFlow/Editor/{ => InspectorEditors}/VersionFlowSettingEditor.cs.meta (100%) diff --git a/Assets/VersionFlow/Editor/InspectorEditors.meta b/Assets/VersionFlow/Editor/InspectorEditors.meta new file mode 100644 index 0000000..573634b --- /dev/null +++ b/Assets/VersionFlow/Editor/InspectorEditors.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a1d01bcac8137274ab74956daabe5cac +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VersionFlow/Editor/InspectorEditors/BuilderConfigEditor.cs b/Assets/VersionFlow/Editor/InspectorEditors/BuilderConfigEditor.cs new file mode 100644 index 0000000..7eca287 --- /dev/null +++ b/Assets/VersionFlow/Editor/InspectorEditors/BuilderConfigEditor.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using UnityEditor; +using UnityEngine; +using VersionFlow.Runtime; + +namespace VersionFlow.Editors +{ + [CustomEditor(typeof(BuilderConfig))] + public class BuilderConfigEditor : Editor + { + public override void OnInspectorGUI() + { + DrawUploader(); + } + + Dictionary m_uploaderEditorMapper = new Dictionary(); + private void DrawUploader() + { + var builder = target as BuilderConfig; + + var uploaderTypes = builder.GetAllPatcherType(); + + var options = uploaderTypes.Select(t => $"{t.Namespace}.{t.Name}").ToList(); + + var selectIndex = options.IndexOf(builder.uploaderClassName); + + + selectIndex = EditorGUILayout.Popup("选择上传器", selectIndex, options.Select(op => PatchUploaderUtility.GetPatcherPrettyName(op)).ToArray()); + if (selectIndex != -1) + { + var selectClassName = options[selectIndex]; + builder.uploaderClassName = selectClassName; + } + + var patchLoader = builder.GetPatchLoader(); + if (patchLoader != null) + { + if (!m_uploaderEditorMapper.TryGetValue(patchLoader, out Editor editor)) + { + editor = Editor.CreateEditor(patchLoader); + m_uploaderEditorMapper[patchLoader] = editor; + } + editor.OnInspectorGUI(); + + string json = patchLoader.GetCfgJson(); + builder.UploaderCfgDict.SetCfgJson(patchLoader.GetType(), json); + } + + if (GUI.changed) + { + EditorUtility.SetDirty(target); + patchLoader.CfgChanged(builder, builder.UploaderCfgDict.GetUploaderCfg(patchLoader.GetType())); + } + + if (!patchLoader.Status) + { + EditorGUILayout.HelpBox(patchLoader.Status, MessageType.Error); + } + } + } +} \ No newline at end of file diff --git a/Assets/VersionFlow/Editor/BuilderConfigEditor.cs.meta b/Assets/VersionFlow/Editor/InspectorEditors/BuilderConfigEditor.cs.meta similarity index 100% rename from Assets/VersionFlow/Editor/BuilderConfigEditor.cs.meta rename to Assets/VersionFlow/Editor/InspectorEditors/BuilderConfigEditor.cs.meta diff --git a/Assets/VersionFlow/Editor/BuilderConfigEditor.cs b/Assets/VersionFlow/Editor/InspectorEditors/PackEditor.cs similarity index 88% rename from Assets/VersionFlow/Editor/BuilderConfigEditor.cs rename to Assets/VersionFlow/Editor/InspectorEditors/PackEditor.cs index 4e1df7a..caaf035 100644 --- a/Assets/VersionFlow/Editor/BuilderConfigEditor.cs +++ b/Assets/VersionFlow/Editor/InspectorEditors/PackEditor.cs @@ -11,33 +11,20 @@ using VersionFlow.Runtime; namespace VersionFlow.Editors { - [CustomEditor(typeof(BuilderConfig))] - public class BuilderConfigEditor : Editor + public class PackEditor : Editor { + static bool FoldOutGroup; + static private BundleManifest RemoteVersion; static private string UpdateVersion; - - static public BundleManifest Report; static private List CompareResult; static private string outputPath; static private Dictionary bundleExtraInfo; - static bool FoldOutGroup; + static public BundleManifest Report; - private static void ResetState() - { - RemoteVersion = null; - UpdateVersion = null; - - Report = null; - CompareResult = null; - outputPath = null; - bundleExtraInfo = null; - } public override void OnInspectorGUI() { - DrawUploader(); - var builder = target as BuilderConfig; EditorGUILayout.Space(20); @@ -68,7 +55,7 @@ namespace VersionFlow.Editors if (CompareResult == null && GUILayout.Button("Build")) { var bc = (BuilderConfig)target; - bc.OnCalcBundleHash = BuilderConfigEditor.CalcBundleHash; + bc.OnCalcBundleHash = CalcBundleHash; Report = bc.Build(UpdateVersion, out outputPath, out bundleExtraInfo); CompareResult = bc.CompareBundleManifest(Report, RemoteVersion); } @@ -86,201 +73,6 @@ namespace VersionFlow.Editors } } - Dictionary m_uploaderEditorMapper = new Dictionary(); - private void DrawUploader() - { - var builder = target as BuilderConfig; - - var uploaderTypes = builder.GetAllPatcherType(); - - var options = uploaderTypes.Select(t => $"{t.Namespace}.{t.Name}").ToList(); - - var selectIndex = options.IndexOf(builder.uploaderClassName); - - - selectIndex = EditorGUILayout.Popup("选择上传器", selectIndex, options.Select(op => PatchUploaderUtility.GetPatcherPrettyName(op)).ToArray()); - if (selectIndex != -1) - { - var selectClassName = options[selectIndex]; - builder.uploaderClassName = selectClassName; - } - - var patchLoader = builder.GetPatchLoader(); - if (patchLoader != null) - { - if (!m_uploaderEditorMapper.TryGetValue(patchLoader, out Editor editor)) - { - editor = Editor.CreateEditor(patchLoader); - m_uploaderEditorMapper[patchLoader] = editor; - } - editor.OnInspectorGUI(); - - string json = patchLoader.GetCfgJson(); - builder.UploaderCfgDict.SetCfgJson(patchLoader.GetType(), json); - } - - if (GUI.changed) - { - EditorUtility.SetDirty(target); - patchLoader.CfgChanged(builder, builder.UploaderCfgDict.GetUploaderCfg(patchLoader.GetType())); - } - - if (!patchLoader.Status) - { - EditorGUILayout.HelpBox(patchLoader.Status, MessageType.Error); - } - } - - private void DrawGroupItems() - { - Undo.RecordObject(target, target.name); - - EditorGUILayout.BeginVertical(); - - var builder = target as BuilderConfig; - builder.DuplicateBundleBeInstallBundle = EditorGUILayout.Toggle("重复依赖资源的bundle作为随包资源", builder.DuplicateBundleBeInstallBundle); - builder.ShaderBundleBeInstallBundle = EditorGUILayout.Toggle("shaderbundle作为随包资源", builder.ShaderBundleBeInstallBundle); - - foreach (var group in builder.Groups) - { - var temp = GUI.color; - - GUI.color = GetGroupColor(group, out var errorMsg); - EditorGUILayout.BeginVertical(EditorStyles.helpBox); - { - EditorGUILayout.LabelField(errorMsg); - //Name And Optionnal - EditorGUILayout.BeginHorizontal(); - { - group.MarkColor = EditorGUILayout.ColorField("标记颜色", group.MarkColor); - group.GroupName = EditorGUILayout.TextField(group.GroupName, GUILayout.Width(100)); - - var groupDeleteColor = GUI.color; - GUI.color = Color.red; - if (GUILayout.Button("X", GUILayout.Width(30))) - { - builder.Groups.Remove(group); - break; - } - GUI.color = groupDeleteColor; - } - EditorGUILayout.EndHorizontal(); - - group.OptionBundle = EditorGUILayout.Toggle($"可选下载包", group.OptionBundle); - group.InstallReady = EditorGUILayout.Toggle($"跟随主包", group.InstallReady); - - //buildMode - EditorGUILayout.BeginHorizontal(); - { - var EnumType = typeof(BuildEntity.EnumBuildMode); - var values = Enum.GetValues(EnumType); - foreach (BuildEntity.EnumBuildMode modeValue in values) - { - var modeName = Enum.GetName(EnumType, modeValue); - - var tempColor = GUI.color; - if (modeValue == group.BuildMode) GUI.color = Color.green; - else GUI.color = Color.white; - if (GUILayout.Button(new GUIContent(modeName, GetDescrib(modeValue)))) - { - group.BuildMode = modeValue; - } - GUI.color = tempColor; - } - } - EditorGUILayout.EndHorizontal(); - - EditorGUILayout.BeginVertical(new GUIStyle { padding = new RectOffset(5, 5, 5, 5) }); - { - for (int i = 0; i < group.FolderList.Count; i++) - { - EditorGUILayout.BeginHorizontal(); - { - var foldAsset = group.FolderList[i]; - var deleteColor = GUI.color; - GUI.color = Color.red; - if (GUILayout.Button("-", GUILayout.Width(20))) - { - group.FolderList.RemoveAt(i); - break; - } - GUI.color = deleteColor; - group.FolderList[i] = (DefaultAsset)EditorGUILayout.ObjectField(foldAsset, typeof(DefaultAsset), false); - } - EditorGUILayout.EndHorizontal(); - } - - //draw add Folder - var addFolderColor = GUI.color; - GUI.color = Color.yellow; - if (GUILayout.Button("添加资源目录")) - { - group.FolderList.Add(null); - } - GUI.color = addFolderColor; - } - EditorGUILayout.EndVertical(); - - } - EditorGUILayout.EndVertical(); - GUI.color = temp; - } - - //Draw Add Group Button - var addColor = GUI.color; - GUI.color = Color.yellow; - if (GUILayout.Button("添加组")) - { - builder.Groups.Add(new BuildEntity()); - } - GUI.color = addColor; - - EditorGUILayout.EndVertical(); - - if (GUI.changed) - { - MarkInBundleFiles.RefreshProjectBundleMark(); - EditorUtility.SetDirty(target); - } - - Color GetGroupColor(BuildEntity group, out string errorMsg) - { - errorMsg = null; - - if (string.IsNullOrWhiteSpace(group.GroupName)) - { - errorMsg = "非法名称"; - return Color.red; - } - if (builder.Groups.Count(item => item.GroupName == group.GroupName) > 1) - { - errorMsg = "名称重复"; - return Color.red; - } - if (group.FolderList.Count == 0) - { - errorMsg = "未包含任何目录"; - return Color.red; - } - if (group.FolderList.Count(f => f == null) > 0) - { - errorMsg = "存在无效目录"; - return Color.red; - } - - if (group.OptionBundle) return Color.cyan; - - return Color.white; - } - - string GetDescrib(T value) where T : Enum - { - var enumType = typeof(T); - var desAtt = enumType.GetField(value.ToString()).GetCustomAttribute(); - return desAtt != null ? desAtt.Description : value.ToString(); - } - } - private void DrawCompareResult(List compareResult, Dictionary bundleExtraInfo) { EditorGUILayout.BeginVertical(EditorStyles.helpBox); @@ -508,5 +300,167 @@ namespace VersionFlow.Editors AssetDatabase.Refresh(); } + + private static void ResetState() + { + RemoteVersion = null; + UpdateVersion = null; + + Report = null; + CompareResult = null; + outputPath = null; + bundleExtraInfo = null; + } + + private void DrawGroupItems() + { + Undo.RecordObject(target, target.name); + + EditorGUILayout.BeginVertical(); + + var builder = target as BuilderConfig; + builder.DuplicateBundleBeInstallBundle = EditorGUILayout.Toggle("重复依赖资源的bundle作为随包资源", builder.DuplicateBundleBeInstallBundle); + builder.ShaderBundleBeInstallBundle = EditorGUILayout.Toggle("shaderbundle作为随包资源", builder.ShaderBundleBeInstallBundle); + + foreach (var group in builder.Groups) + { + var temp = GUI.color; + + GUI.color = GetGroupColor(group, out var errorMsg); + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + { + EditorGUILayout.LabelField(errorMsg); + //Name And Optionnal + EditorGUILayout.BeginHorizontal(); + { + group.MarkColor = EditorGUILayout.ColorField("标记颜色", group.MarkColor); + group.GroupName = EditorGUILayout.TextField(group.GroupName, GUILayout.Width(100)); + + var groupDeleteColor = GUI.color; + GUI.color = Color.red; + if (GUILayout.Button("X", GUILayout.Width(30))) + { + builder.Groups.Remove(group); + break; + } + GUI.color = groupDeleteColor; + } + EditorGUILayout.EndHorizontal(); + + group.OptionBundle = EditorGUILayout.Toggle($"可选下载包", group.OptionBundle); + group.InstallReady = EditorGUILayout.Toggle($"跟随主包", group.InstallReady); + + //buildMode + EditorGUILayout.BeginHorizontal(); + { + var EnumType = typeof(BuildEntity.EnumBuildMode); + var values = Enum.GetValues(EnumType); + foreach (BuildEntity.EnumBuildMode modeValue in values) + { + var modeName = Enum.GetName(EnumType, modeValue); + + var tempColor = GUI.color; + if (modeValue == group.BuildMode) GUI.color = Color.green; + else GUI.color = Color.white; + if (GUILayout.Button(new GUIContent(modeName, GetDescrib(modeValue)))) + { + group.BuildMode = modeValue; + } + GUI.color = tempColor; + } + } + EditorGUILayout.EndHorizontal(); + + EditorGUILayout.BeginVertical(new GUIStyle { padding = new RectOffset(5, 5, 5, 5) }); + { + for (int i = 0; i < group.FolderList.Count; i++) + { + EditorGUILayout.BeginHorizontal(); + { + var foldAsset = group.FolderList[i]; + var deleteColor = GUI.color; + GUI.color = Color.red; + if (GUILayout.Button("-", GUILayout.Width(20))) + { + group.FolderList.RemoveAt(i); + break; + } + GUI.color = deleteColor; + group.FolderList[i] = (DefaultAsset)EditorGUILayout.ObjectField(foldAsset, typeof(DefaultAsset), false); + } + EditorGUILayout.EndHorizontal(); + } + + //draw add Folder + var addFolderColor = GUI.color; + GUI.color = Color.yellow; + if (GUILayout.Button("添加资源目录")) + { + group.FolderList.Add(null); + } + GUI.color = addFolderColor; + } + EditorGUILayout.EndVertical(); + + } + EditorGUILayout.EndVertical(); + GUI.color = temp; + } + + //Draw Add Group Button + var addColor = GUI.color; + GUI.color = Color.yellow; + if (GUILayout.Button("添加组")) + { + builder.Groups.Add(new BuildEntity()); + } + GUI.color = addColor; + + EditorGUILayout.EndVertical(); + + if (GUI.changed) + { + MarkInBundleFiles.RefreshProjectBundleMark(); + EditorUtility.SetDirty(target); + } + + Color GetGroupColor(BuildEntity group, out string errorMsg) + { + errorMsg = null; + + if (string.IsNullOrWhiteSpace(group.GroupName)) + { + errorMsg = "非法名称"; + return Color.red; + } + if (builder.Groups.Count(item => item.GroupName == group.GroupName) > 1) + { + errorMsg = "名称重复"; + return Color.red; + } + if (group.FolderList.Count == 0) + { + errorMsg = "未包含任何目录"; + return Color.red; + } + if (group.FolderList.Count(f => f == null) > 0) + { + errorMsg = "存在无效目录"; + return Color.red; + } + + if (group.OptionBundle) return Color.cyan; + + return Color.white; + } + + string GetDescrib(T value) where T : Enum + { + var enumType = typeof(T); + var desAtt = enumType.GetField(value.ToString()).GetCustomAttribute(); + return desAtt != null ? desAtt.Description : value.ToString(); + } + } + } } \ No newline at end of file diff --git a/Assets/VersionFlow/Editor/InspectorEditors/PackEditor.cs.meta b/Assets/VersionFlow/Editor/InspectorEditors/PackEditor.cs.meta new file mode 100644 index 0000000..8554f4a --- /dev/null +++ b/Assets/VersionFlow/Editor/InspectorEditors/PackEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 390bca0e4e3f95c478211fc551302829 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VersionFlow/Editor/VersionFlowSettingEditor.cs b/Assets/VersionFlow/Editor/InspectorEditors/VersionFlowSettingEditor.cs similarity index 100% rename from Assets/VersionFlow/Editor/VersionFlowSettingEditor.cs rename to Assets/VersionFlow/Editor/InspectorEditors/VersionFlowSettingEditor.cs diff --git a/Assets/VersionFlow/Editor/VersionFlowSettingEditor.cs.meta b/Assets/VersionFlow/Editor/InspectorEditors/VersionFlowSettingEditor.cs.meta similarity index 100% rename from Assets/VersionFlow/Editor/VersionFlowSettingEditor.cs.meta rename to Assets/VersionFlow/Editor/InspectorEditors/VersionFlowSettingEditor.cs.meta diff --git a/Assets/VersionFlow/Editor/SetupInstallBundle.cs b/Assets/VersionFlow/Editor/SetupInstallBundle.cs index c32a8d3..5b0e034 100644 --- a/Assets/VersionFlow/Editor/SetupInstallBundle.cs +++ b/Assets/VersionFlow/Editor/SetupInstallBundle.cs @@ -163,7 +163,7 @@ namespace VersionFlow.Editors fetchBundles.Clear(); var builder = PatchUploaderUtility.FindBuilderInProject(); - m_remoteInfo = BuilderConfigEditor.FetchRemoteVersion(builder); + m_remoteInfo = PackEditor.FetchRemoteVersion(builder); foreach (var bundle in m_remoteInfo.remoteVersion.Bundles) { diff --git a/Assets/VersionFlow/Editor/VersionFlowSettingWnd.cs b/Assets/VersionFlow/Editor/VersionFlowSettingWnd.cs index cef00bf..6d4a303 100644 --- a/Assets/VersionFlow/Editor/VersionFlowSettingWnd.cs +++ b/Assets/VersionFlow/Editor/VersionFlowSettingWnd.cs @@ -8,8 +8,11 @@ namespace VersionFlow.Editors public class VersionFlowSettingWnd : EditorWindow { private BuilderConfig m_builder; + + private Editor m_packEditor; private Editor m_builderEditor; private Editor m_settingEditor; + private Vector2 m_builderEditorScroll; [MenuItem("VersionFlow/Setting", priority = int.MinValue)] @@ -24,6 +27,7 @@ namespace VersionFlow.Editors titleContent = new GUIContent("VersionFlow"); m_builder = PatchUploaderUtility.FindBuilderInProject(); + m_packEditor = Editor.CreateEditor(m_builder, typeof(PackEditor)); m_builderEditor = Editor.CreateEditor(m_builder); m_settingEditor = Editor.CreateEditor(m_builder.vfSetting); @@ -60,6 +64,7 @@ namespace VersionFlow.Editors private void DrawEditorTabRegion() { + DrawEditorTabItem(m_packEditor, "打包设置"); DrawEditorTabItem(m_builderEditor, "上传设置"); DrawEditorTabItem(m_settingEditor, "运行时设置");