From 8d705cbd94257ef8fbdafaa59503da7f6adfc16b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=80=9D=E6=B5=B7?= <1464576565@qq.com> Date: Mon, 10 Nov 2025 16:01:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UI/GenerateTool/UIGenerateEditorTool.cs | 61 ++++-- .../GenerateTool/UIScriptGeneratorHelper.cs | 115 ++++++----- .../UI/GenerateTool/UISettingEditorWindow.cs | 11 +- Editor/UI/IUIGeneratorHelper.cs | 31 --- Editor/UI/IUIGeneratorRuleHelper.cs | 181 ++++++++++++++++++ ...cs.meta => IUIGeneratorRuleHelper.cs.meta} | 0 Editor/UI/UIConfig/UIGenerateConfiguration.cs | 7 +- 7 files changed, 296 insertions(+), 110 deletions(-) delete mode 100644 Editor/UI/IUIGeneratorHelper.cs create mode 100644 Editor/UI/IUIGeneratorRuleHelper.cs rename Editor/UI/{IUIGeneratorHelper.cs.meta => IUIGeneratorRuleHelper.cs.meta} (100%) diff --git a/Editor/UI/GenerateTool/UIGenerateEditorTool.cs b/Editor/UI/GenerateTool/UIGenerateEditorTool.cs index 9263dad..e9d2768 100644 --- a/Editor/UI/GenerateTool/UIGenerateEditorTool.cs +++ b/Editor/UI/GenerateTool/UIGenerateEditorTool.cs @@ -7,9 +7,6 @@ namespace AlicizaX.UI.Editor public class UIGenerateEditorWindow : EditorWindow { private GameObject selectedObject; - private Vector2 windowPosition; - private float windowWidth; - private float windowHeight; private string[] menuItems; [MenuItem("GameObject/UI生成绑定", priority = 10)] @@ -21,37 +18,79 @@ namespace AlicizaX.UI.Editor var uiScriptConfigs = UIGenerateConfiguration.Instance.UIScriptGenerateConfigs; if (uiScriptConfigs == null || uiScriptConfigs.Count == 0) return; - var window = GetWindow("", true); + var window = GetWindow(true, "UI 生成绑定", true); window.selectedObject = selectedObject; window.menuItems = uiScriptConfigs.Select(config => $"{config.ProjectName}").ToArray(); - var windowWidth = 300; - var windowHeight = (window.menuItems.Length * 35f); + var windowWidth = 300f; + var windowHeight = Mathf.Max(1, window.menuItems.Length) * 35f + 10f; + Vector3 objectWorldPosition = selectedObject.transform.position; - Vector3 screenPosition = HandleUtility.WorldToGUIPoint(objectWorldPosition); - var windowPosition = new Vector2(screenPosition.x, screenPosition.y - windowHeight - 5f); + Vector2 screenPoint; + + var sceneView = SceneView.lastActiveSceneView; + if (sceneView != null) + { + + Vector2 guiPointInSceneView = HandleUtility.WorldToGUIPoint(objectWorldPosition); + + screenPoint = new Vector2(sceneView.position.x + guiPointInSceneView.x, + sceneView.position.y + guiPointInSceneView.y); + } + else if (EditorWindow.mouseOverWindow != null) + { + + Vector2 guiPoint = HandleUtility.WorldToGUIPoint(objectWorldPosition); + var host = EditorWindow.mouseOverWindow; + screenPoint = new Vector2(host.position.x + guiPoint.x, host.position.y + guiPoint.y); + } + else + { + + var mainDisplay = Display.displays.Length > 0 ? Display.displays[0] : null; + float centerX = (mainDisplay != null) ? (mainDisplay.systemWidth / 2f) : (Screen.width / 2f); + float centerY = (mainDisplay != null) ? (mainDisplay.systemHeight / 2f) : (Screen.height / 2f); + screenPoint = new Vector2(centerX, centerY); + } + + + Vector2 windowPosition = new Vector2(screenPoint.x, screenPoint.y - windowHeight - 5f); + + + float screenW = Mathf.Max(100, Display.main.systemWidth); + float screenH = Mathf.Max(100, Display.main.systemHeight); + if (windowPosition.x + windowWidth > screenW) windowPosition.x = screenW - windowWidth - 5f; + if (windowPosition.x < 5f) windowPosition.x = 5f; + if (windowPosition.y < 5f) windowPosition.y = 5f; + if (windowPosition.y + windowHeight > screenH) windowPosition.y = screenH - windowHeight - 5f; window.minSize = new Vector2(windowWidth, windowHeight); window.maxSize = new Vector2(windowWidth, windowHeight); window.position = new Rect(windowPosition, new Vector2(windowWidth, windowHeight)); - window.Show(); + window.ShowPopup(); } private void OnGUI() { GUILayout.Space(5); + if (menuItems == null || menuItems.Length == 0) + { + EditorGUILayout.LabelField("没有可用配置"); + return; + } + foreach (var item in menuItems) { - if (GUILayout.Button(item, EditorStyles.toolbarButton)) + if (GUILayout.Button(item, EditorStyles.toolbarButton, GUILayout.Height(28))) { GenerateScriptForConfig(selectedObject, item); Close(); } - GUILayout.Space(10); + GUILayout.Space(6); } } diff --git a/Editor/UI/GenerateTool/UIScriptGeneratorHelper.cs b/Editor/UI/GenerateTool/UIScriptGeneratorHelper.cs index 499033d..13a8292 100644 --- a/Editor/UI/GenerateTool/UIScriptGeneratorHelper.cs +++ b/Editor/UI/GenerateTool/UIScriptGeneratorHelper.cs @@ -10,6 +10,7 @@ using Sirenix.Utilities.Editor; using UnityEngine; using UnityEditor; using UnityEditor.Callbacks; +using UnityEditor.SceneManagement; using UnityEngine.UI; public enum EBindType @@ -47,28 +48,28 @@ namespace AlicizaX.UI.Editor internal static class UIScriptGeneratorHelper { private static UIGenerateConfiguration _uiGenerateConfiguration; - private static IUIGeneratorHelper _nameRuleHelper; + private static IUIGeneratorRuleHelper _uiGeneratorRuleHelper; /// /// 设置自定义命名规则助手[4](@ref) /// - public static IUIGeneratorHelper UIGeneratorRuleHelper + public static IUIGeneratorRuleHelper UIGeneratorRuleHelper { get { - if (_nameRuleHelper == null || (_nameRuleHelper != null && !UIConfiguration.UIScriptGeneratorHelper.Equals(_nameRuleHelper.GetType().FullName))) + if (_uiGeneratorRuleHelper == null || (_uiGeneratorRuleHelper != null && !UIConfiguration.UIScriptGeneratorRuleHelper.Equals(_uiGeneratorRuleHelper.GetType().FullName))) { - Type ruleHelperType = Type.GetType(UIConfiguration.UIScriptGeneratorHelper); + Type ruleHelperType = Type.GetType(UIConfiguration.UIScriptGeneratorRuleHelper); if (ruleHelperType == null) { - Debug.LogError($"UIScriptGeneratorHelper: Could not load UI ScriptGeneratorHelper {UIConfiguration.UIScriptGeneratorHelper}"); + Debug.LogError($"UIScriptGeneratorHelper: Could not load UI ScriptGeneratorHelper {UIConfiguration.UIScriptGeneratorRuleHelper}"); return null; } - _nameRuleHelper = Activator.CreateInstance(ruleHelperType) as IUIGeneratorHelper; + _uiGeneratorRuleHelper = Activator.CreateInstance(ruleHelperType) as IUIGeneratorRuleHelper; } - return _nameRuleHelper; + return _uiGeneratorRuleHelper; } } @@ -114,7 +115,6 @@ namespace AlicizaX.UI.Editor } private static List _uiBindDatas = new List(); - private static string _generateNameSpace = string.Empty; private static List _arrayComponents = new List(); private static void GetBindData(Transform root) @@ -322,14 +322,13 @@ namespace AlicizaX.UI.Editor return variableTextBuilder.ToString(); } - private static string GenerateScript(string className) + private static string GenerateScript(string className, string generateNameSpace) { StringBuilder scriptBuilder = new StringBuilder(); scriptBuilder.Append(GetReferenceNamespace()); - scriptBuilder.Append("using Sirenix.OdinInspector;\n"); scriptBuilder.Append("using AlicizaX.UI.Runtime;\n"); - scriptBuilder.Append($"namespace {_generateNameSpace}\n"); + scriptBuilder.Append($"namespace {generateNameSpace}\n"); scriptBuilder.Append("{\n"); scriptBuilder.Append("\t#Attribute#\n"); scriptBuilder.Append($"\tpublic class {className} : UIHolderObjectBase\n"); @@ -349,69 +348,38 @@ namespace AlicizaX.UI.Editor public static void GenerateAndAttachScript(GameObject targetObject, UIScriptGenerateData scriptGenerateData) { + if (!PrefabChecker.IsPrefabAsset(targetObject)) + { + Debug.LogWarning("请将UI界面保存为对应的目录Prefab 在进行代码生成"); + return; + } + + if (!UIGeneratorRuleHelper.CheckCanGenerate(targetObject, scriptGenerateData)) + { + return; + } + EditorPrefs.SetInt("InstanceId", targetObject.GetInstanceID()); _uiBindDatas.Clear(); - _generateNameSpace = scriptGenerateData.NameSpace; _arrayComponents.Clear(); - string className = $"{UIConfiguration.UIGenerateCommonData.GeneratePrefix}_{targetObject.name}"; - string scriptSavePath = Path.Combine(scriptGenerateData.GenerateHolderCodePath, className + ".cs"); + string className = UIGeneratorRuleHelper.GetClassGenerateName(targetObject, scriptGenerateData); GetBindData(targetObject.transform); - string scriptContent = GenerateScript(className); - string tagName = $"\"{targetObject.name}\""; - - if (scriptGenerateData.LoadType == EUIResLoadType.Resources) - { - string matchWords = string.Empty; - UIConfiguration.UIGenerateCommonData.CombineWords.Any(t => - { - if (targetObject.name.IndexOf(t.Key, StringComparison.Ordinal) >= 0) - { - matchWords = t.Value; - } - - return targetObject.name.IndexOf(t.Key, StringComparison.Ordinal) >= 0; - }); - - string finalPath = Path.Combine( - scriptGenerateData.UIPrefabRootPath.Replace("Assets/", "").Replace("Resources/", ""), - matchWords); - string directory = Path.Combine(scriptGenerateData.UIPrefabRootPath, matchWords); - - if (!Directory.Exists(directory)) - { - Directory.CreateDirectory(directory); - } - - finalPath = Utility.Path.GetRegularPath(finalPath); - tagName = $"\"{finalPath}/{targetObject.name}\""; - } - - scriptContent = scriptContent.Replace("#Tag#", tagName); + string scriptContent = GenerateScript(className, scriptGenerateData.NameSpace); + string tagName = $"\"{UIGeneratorRuleHelper.GetUIResourceSavePath(targetObject, scriptGenerateData)}\""; string uiAttribute = $"[UIRes({className}.ResTag, EUIResLoadType.{scriptGenerateData.LoadType})]"; + scriptContent = scriptContent.Replace("#Attribute#", uiAttribute); + scriptContent = scriptContent.Replace("#Tag#", tagName); - if (File.Exists(scriptSavePath)) - { - string oldText = File.ReadAllText(scriptSavePath); - if (oldText.Equals(scriptContent)) - { - EditorPrefs.SetString("Generate", className); - CheckHasAttach(); - return; - } - } - - File.WriteAllText(scriptSavePath, scriptContent, Encoding.UTF8); - EditorPrefs.SetString("Generate", className); - AssetDatabase.Refresh(); + UIGeneratorRuleHelper.WriteUIScriptContent(className, scriptContent, scriptGenerateData); } [DidReloadScripts] - private static void CheckHasAttach() + public static void CheckHasAttach() { bool has = EditorPrefs.HasKey("Generate"); if (has) @@ -513,5 +481,32 @@ namespace AlicizaX.UI.Editor Debug.LogError($"Could not find the class: {scriptClassName}"); } } + + public static class PrefabChecker + { + public static bool IsEditingPrefabAsset(GameObject go) + { + // 检查当前是否在Prefab编辑模式 + var prefabStage = PrefabStageUtility.GetCurrentPrefabStage(); + if (prefabStage == null) + return false; + + // 检查选中对象是否属于当前PrefabStage + return prefabStage.IsPartOfPrefabContents(go); + } + + public static bool IsPrefabAsset(GameObject go) + { + // 普通Asset目录中的Prefab + var assetType = PrefabUtility.GetPrefabAssetType(go); + if (assetType == PrefabAssetType.Regular || + assetType == PrefabAssetType.Variant || + assetType == PrefabAssetType.Model) + return true; + + // Prefab编辑模式下 + return IsEditingPrefabAsset(go); + } + } } } diff --git a/Editor/UI/GenerateTool/UISettingEditorWindow.cs b/Editor/UI/GenerateTool/UISettingEditorWindow.cs index 4e5cbaf..4ef9919 100644 --- a/Editor/UI/GenerateTool/UISettingEditorWindow.cs +++ b/Editor/UI/GenerateTool/UISettingEditorWindow.cs @@ -161,7 +161,7 @@ namespace AlicizaX.UI.Editor d.UIPrefabRootPath = DrawFolderField("Prefab根目录", d.UIPrefabRootPath, rect.x, rect.y + 3 * (lh + pad), rect.width, lh); d.LoadType = (EUIResLoadType)EditorGUI.EnumPopup(new Rect(rect.x, rect.y + 4 * (lh + pad), rect.width, lh), "加载类型", d.LoadType); }; - projectList.onAddCallback = (r) => UIScriptGenerateConfigs.Add(new UIScriptGenerateData { ProjectName = "NewProject", NameSpace = "Game.UI", GenerateHolderCodePath = "Assets/Scripts/UI/Generated", UIPrefabRootPath = "Assets/Art/UI/Prefabs", LoadType = EUIResLoadType.Resources }); + projectList.onAddCallback = (r) => UIScriptGenerateConfigs.Add(new UIScriptGenerateData { ProjectName = "NewProject", NameSpace = "Game.UI", GenerateHolderCodePath = "Assets/Scripts/UI/Generated", UIPrefabRootPath = "Assets/Resources/UI", LoadType = EUIResLoadType.Resources }); projectList.onRemoveCallback = (r) => { if (r.index >= 0) UIScriptGenerateConfigs.RemoveAt(r.index); @@ -192,9 +192,9 @@ namespace AlicizaX.UI.Editor { m_ScriptGeneratorHelperTypes = new List(); - m_ScriptGeneratorHelperTypes.AddRange(AlicizaX.Utility.Assembly.GetRuntimeTypeNames(typeof(IUIGeneratorHelper))); + m_ScriptGeneratorHelperTypes.AddRange(AlicizaX.Utility.Assembly.GetRuntimeTypeNames(typeof(IUIGeneratorRuleHelper))); - m_ScriptGeneratorHelperSelectIndex = m_ScriptGeneratorHelperTypes.IndexOf(UIGenerateConfiguration.Instance.UIScriptGeneratorHelper); + m_ScriptGeneratorHelperSelectIndex = m_ScriptGeneratorHelperTypes.IndexOf(UIGenerateConfiguration.Instance.UIScriptGeneratorRuleHelper); if (m_ScriptGeneratorHelperSelectIndex < 0) { m_ScriptGeneratorHelperSelectIndex = 0; @@ -271,9 +271,9 @@ namespace AlicizaX.UI.Editor UIGenerateCommonData.GeneratePrefix = EditorGUILayout.TextField(new GUIContent("生成脚本前缀"), UIGenerateCommonData.GeneratePrefix); m_ScriptGeneratorHelperSelectIndex = EditorGUILayout.Popup("解密服务", m_ScriptGeneratorHelperSelectIndex, m_ScriptGeneratorHelperTypes.ToArray()); string selectService = m_ScriptGeneratorHelperTypes[m_ScriptGeneratorHelperSelectIndex]; - if (uiGenerateConfiguration.UIScriptGeneratorHelper != selectService) + if (uiGenerateConfiguration.UIScriptGeneratorRuleHelper != selectService) { - UIGenerateConfiguration.Instance.UIScriptGeneratorHelper = selectService; + UIGenerateConfiguration.Instance.UIScriptGeneratorRuleHelper = selectService; UIGenerateConfiguration.Save(); } @@ -496,6 +496,7 @@ namespace AlicizaX.UI.Editor uiGenerateConfiguration.UIElementRegexConfigs = UIElementRegexConfigs; uiGenerateConfiguration.UIScriptGenerateConfigs = UIScriptGenerateConfigs; UIGenerateConfiguration.Save(); + Debug.Log("UIGenerateConfiguration Saved..."); } private void OnDisable() => SaveConfig(); diff --git a/Editor/UI/IUIGeneratorHelper.cs b/Editor/UI/IUIGeneratorHelper.cs deleted file mode 100644 index 5cca2e0..0000000 --- a/Editor/UI/IUIGeneratorHelper.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; - -namespace AlicizaX.UI.Editor -{ - public interface IUIGeneratorHelper - { - string GetPrivateComponentByNameRule(string regexName, string componetName, EBindType bindType); - - string GetPublicComponentByNameRule(string variableName); - } - - public class DefaultUIGeneratorHelper : IUIGeneratorHelper - { - public string GetPrivateComponentByNameRule(string regexName, string componentName, EBindType bindType) - { - string endPrefix = bindType == EBindType.ListCom ? "List" : string.Empty; - int endNameIndex = componentName.IndexOf( - UIGenerateConfiguration.Instance.UIGenerateCommonData.ComCheckEndName, - StringComparison.Ordinal); - - string componentSuffix = endNameIndex >= 0 ? componentName.Substring(endNameIndex + 1) : componentName; - - return $"m{regexName}{componentSuffix}{endPrefix}"; - } - - public string GetPublicComponentByNameRule(string variableName) - { - return variableName.Substring(1); - } - } -} diff --git a/Editor/UI/IUIGeneratorRuleHelper.cs b/Editor/UI/IUIGeneratorRuleHelper.cs new file mode 100644 index 0000000..d3e4c69 --- /dev/null +++ b/Editor/UI/IUIGeneratorRuleHelper.cs @@ -0,0 +1,181 @@ +using System; +using System.IO; +using System.Text; +using AlicizaX.UI.Runtime; +using UnityEditor; +using UnityEditor.SceneManagement; +using UnityEngine; + +namespace AlicizaX.UI.Editor +{ + public interface IUIGeneratorRuleHelper + { + string GetPrivateComponentByNameRule(string regexName, string componetName, EBindType bindType); + + string GetPublicComponentByNameRule(string variableName); + + string GetClassGenerateName(GameObject targetObject, UIScriptGenerateData scriptGenerateData); + + string GetUIResourceSavePath(GameObject targetObject, UIScriptGenerateData scriptGenerateData); + + void WriteUIScriptContent(string className, string scriptContent, UIScriptGenerateData scriptGenerateData); + + bool CheckCanGenerate(GameObject targetObject, UIScriptGenerateData scriptGenerateData); + } + + public class DefaultIuiGeneratorRuleHelper : IUIGeneratorRuleHelper + { + public string GetPrivateComponentByNameRule(string regexName, string componentName, EBindType bindType) + { + string endPrefix = bindType == EBindType.ListCom ? "List" : string.Empty; + int endNameIndex = componentName.IndexOf( + UIGenerateConfiguration.Instance.UIGenerateCommonData.ComCheckEndName, + StringComparison.Ordinal); + + string componentSuffix = endNameIndex >= 0 ? componentName.Substring(endNameIndex + 1) : componentName; + + return $"m{regexName}{componentSuffix}{endPrefix}"; + } + + public string GetPublicComponentByNameRule(string variableName) + { + return variableName.Substring(1); + } + + public string GetClassGenerateName(GameObject targetObject, UIScriptGenerateData scriptGenerateData) + { + return $"{UIGenerateConfiguration.Instance.UIGenerateCommonData.GeneratePrefix}_{targetObject.name}"; + } + + public string GetUIResourceSavePath(GameObject targetObject, UIScriptGenerateData scriptGenerateData) + { + if (targetObject == null) + return $"\"{nameof(targetObject)}\""; + + // 默认返回资源名 + string defaultPath = targetObject.name; + + // 获取对应的Prefab资源路径(支持场景Prefab实例 & Prefab编辑模式) + string assetPath = GetPrefabAssetPath(targetObject); + if (string.IsNullOrEmpty(assetPath) || !assetPath.StartsWith("Assets/")) + return defaultPath; // 不在 Assets 下 + + // 统一使用正斜杠 + assetPath = assetPath.Replace('\\', '/'); + + switch (scriptGenerateData.LoadType) + { + case EUIResLoadType.Resources: + { + string resourcesRoot = scriptGenerateData.UIPrefabRootPath; // 例如 "Assets/Resources/UI" + string relPath = GetResourcesRelativePath(assetPath, resourcesRoot); + + if (relPath == null) + { + Debug.LogWarning($"[UI生成] 资源 {assetPath} 不在配置的 Resources 根目录下: {resourcesRoot}"); + return defaultPath; + } + + return relPath; + } + + case EUIResLoadType.AssetBundle: + { + string bundleRoot = scriptGenerateData.UIPrefabRootPath; // 例如 "Assets/Bundles/UI" + var defaultPackage = YooAsset.Editor.AssetBundleCollectorSettingData.Setting.GetPackage("DefaultPackage"); + if (defaultPackage.EnableAddressable) + return defaultPath; + + if (!assetPath.StartsWith(bundleRoot, System.StringComparison.OrdinalIgnoreCase)) + { + Debug.LogWarning($"[UI生成] 资源 {assetPath} 不在配置的 AssetBundle 根目录下: {bundleRoot}"); + return defaultPath; + } + + return Path.ChangeExtension(assetPath, null); + } + + default: + return defaultPath; + } + } + + /// + /// 获取 GameObject 对应的 Prefab 资源路径,如果是 Prefab 编辑模式也可以获取 + /// + private string GetPrefabAssetPath(GameObject go) + { + var prefabAsset = PrefabUtility.GetCorrespondingObjectFromSource(go); + if (prefabAsset != null) + return AssetDatabase.GetAssetPath(prefabAsset); + + // Prefab 编辑模式 + var prefabStage = PrefabStageUtility.GetCurrentPrefabStage(); + if (prefabStage != null && prefabStage.IsPartOfPrefabContents(go)) + return prefabStage.assetPath; + + return null; + } + + /// + /// 获取 Resources.Load 可用路径(去掉扩展名),如果不在指定的 Resources 根目录返回 null + /// + private string GetResourcesRelativePath(string assetPath, string resourcesRoot) + { + // 统一正斜杠 + assetPath = assetPath.Replace('\\', '/'); + resourcesRoot = resourcesRoot.Replace('\\', '/'); + + if (!assetPath.StartsWith(resourcesRoot, System.StringComparison.OrdinalIgnoreCase)) + return null; + + // 获取相对路径 + string relPath = assetPath.Substring(resourcesRoot.Length).TrimStart('/'); + return Path.ChangeExtension(relPath, null); // 去掉扩展名 + } + + + public void WriteUIScriptContent(string className, string scriptContent, UIScriptGenerateData scriptGenerateData) + { + string scriptFolderPath = scriptGenerateData.GenerateHolderCodePath; + string scriptFilePath = Path.Combine(scriptFolderPath, className + ".cs"); + + if (!Directory.Exists(scriptFolderPath)) + { + Directory.CreateDirectory(scriptFolderPath); + } + + if (File.Exists(scriptFilePath)) + { + string oldText = File.ReadAllText(scriptFilePath); + if (oldText.Equals(scriptContent)) + { + EditorPrefs.SetString("Generate", className); + UIScriptGeneratorHelper.CheckHasAttach(); + return; + } + } + + File.WriteAllText(scriptFilePath, scriptContent, Encoding.UTF8); + EditorPrefs.SetString("Generate", className); + AssetDatabase.Refresh(); + } + + public bool CheckCanGenerate(GameObject targetObject, UIScriptGenerateData scriptGenerateData) + { + string assetPath = GetPrefabAssetPath(targetObject); + if (string.IsNullOrEmpty(assetPath) || !assetPath.StartsWith("Assets/")) + return false; // 不在 Assets 下 + + // 统一使用正斜杠 + assetPath = assetPath.Replace('\\', '/'); + bool result = assetPath.StartsWith(scriptGenerateData.UIPrefabRootPath, System.StringComparison.OrdinalIgnoreCase); + if (!result) + { + Debug.LogWarning($"UI存储位置与配置生成规则不符合 请检查对应配置的UIPrefabRootPath\n[AssetPath]{assetPath}\n[ConfigPath]{scriptGenerateData.UIPrefabRootPath}"); + } + + return result; + } + } +} diff --git a/Editor/UI/IUIGeneratorHelper.cs.meta b/Editor/UI/IUIGeneratorRuleHelper.cs.meta similarity index 100% rename from Editor/UI/IUIGeneratorHelper.cs.meta rename to Editor/UI/IUIGeneratorRuleHelper.cs.meta diff --git a/Editor/UI/UIConfig/UIGenerateConfiguration.cs b/Editor/UI/UIConfig/UIGenerateConfiguration.cs index 5c7c558..58b1047 100644 --- a/Editor/UI/UIConfig/UIGenerateConfiguration.cs +++ b/Editor/UI/UIConfig/UIGenerateConfiguration.cs @@ -7,6 +7,7 @@ using AlicizaX.Editor.Setting; using AlicizaX.UI.Runtime; using UnityEngine; using UnityEditor; +using UnityEngine.Serialization; namespace AlicizaX.UI.Editor { @@ -19,7 +20,7 @@ namespace AlicizaX.UI.Editor [Header("UI脚本生成配置(支持多个项目)")] public List UIScriptGenerateConfigs = new List(); - [Header("UI脚本生成辅助类")] public string UIScriptGeneratorHelper; + [Header("UI脚本生成辅助类")] public string UIScriptGeneratorRuleHelper; } [Serializable] @@ -64,9 +65,9 @@ namespace AlicizaX.UI.Editor [Header("路径设置")] [Tooltip("生成的UI脚本路径(相对Assets)")] public string GenerateHolderCodePath = "Assets/Scripts/UI/Generated"; - [Tooltip("UI Prefab根目录")] public string UIPrefabRootPath = "Assets/Art/UI/Prefabs"; + [Tooltip("UI Prefab根目录")] public string UIPrefabRootPath = "Assets/Resources/UI/"; - [Header("加载类型")] [Tooltip("UI资源加载方式(本地 / YooAsset / Addressable等)")] + [Header("加载类型")] [Tooltip("UI资源加载方式(本地 / YooAsset )")] public EUIResLoadType LoadType = EUIResLoadType.Resources; }