com.alicizax.unity.framework/Editor/UI/UIConfig/UIGenerateConfiguration.cs

86 lines
3.1 KiB
C#
Raw Normal View History

2025-09-05 19:46:30 +08:00
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using AlicizaX;
2025-11-07 20:47:57 +08:00
using AlicizaX.Editor.Setting;
2025-09-05 19:46:30 +08:00
using AlicizaX.UI.Runtime;
using UnityEngine;
2025-11-07 20:47:57 +08:00
using UnityEditor;
2025-09-05 19:46:30 +08:00
namespace AlicizaX.UI.Editor
{
[AlicizaX.Editor.Setting.FilePath("ProjectSettings/UIGenerateConfiguration.asset")]
2025-11-07 20:47:57 +08:00
internal class UIGenerateConfiguration : AlicizaX.Editor.Setting.ScriptableSingleton<UIGenerateConfiguration>
2025-09-05 19:46:30 +08:00
{
2025-11-07 20:47:57 +08:00
[Header("通用生成配置")] public UIGenerateCommonData UIGenerateCommonData = new UIGenerateCommonData();
2025-09-05 19:46:30 +08:00
2025-11-07 20:47:57 +08:00
[Header("UI生成规则根据正则匹配")] public List<UIEelementRegexData> UIElementRegexConfigs = new List<UIEelementRegexData>();
[Header("UI脚本生成配置支持多个项目")] public List<UIScriptGenerateData> UIScriptGenerateConfigs = new List<UIScriptGenerateData>();
[Header("UI脚本生成辅助类")] public string UIScriptGeneratorHelper;
2025-09-05 19:46:30 +08:00
}
2025-11-07 20:47:57 +08:00
[Serializable]
public class UIGenerateCommonData
2025-09-05 19:46:30 +08:00
{
2025-11-07 20:47:57 +08:00
[Header("命名规则")] [Tooltip("组件检查分隔符例如Button#Close")]
public string ComCheckSplitName = "#";
2025-09-05 19:46:30 +08:00
2025-11-07 20:47:57 +08:00
[Tooltip("组件结尾分隔符,例如:@End")] public string ComCheckEndName = "@";
2025-09-05 19:46:30 +08:00
2025-11-07 20:47:57 +08:00
[Tooltip("数组组件检查分隔符,例如:*Item")] public string ArrayComSplitName = "*";
2025-09-05 19:46:30 +08:00
2025-11-07 20:47:57 +08:00
[Tooltip("生成脚本前缀")] public string GeneratePrefix = "ui";
2025-09-05 19:46:30 +08:00
2025-11-07 20:47:57 +08:00
[Tooltip("排除的关键字(匹配则不生成)")] public string[] ExcludeKeywords = { "ViewHolder" };
2025-09-05 19:46:30 +08:00
2025-11-07 20:47:57 +08:00
[Tooltip("路径拼接映射Window -> Window 文件夹")]
public List<StringPair> CombineWords = new List<StringPair>()
2025-09-05 19:46:30 +08:00
{
2025-11-07 20:47:57 +08:00
new StringPair("Window", "Window"),
new StringPair("ViewHolder", "ViewHolder"),
new StringPair("Widget", "Widget"),
};
2025-09-05 19:46:30 +08:00
}
2025-11-07 20:47:57 +08:00
[Serializable]
public class UIEelementRegexData
2025-09-05 19:46:30 +08:00
{
2025-11-07 20:47:57 +08:00
[Tooltip("匹配UI元素名称的正则表达式")] public string uiElementRegex;
[Tooltip("匹配到的UI组件类型")] public string componentType;
2025-09-05 19:46:30 +08:00
}
2025-11-07 20:47:57 +08:00
[Serializable]
2025-09-05 19:46:30 +08:00
public class UIScriptGenerateData
{
2025-11-07 20:47:57 +08:00
[Header("项目识别信息")] [Tooltip("该UI工程的名称例如MainProject, HotFix, EditorUI")]
public string ProjectName = "MainProject";
[Tooltip("该UI工程所属命名空间")] public string NameSpace = "Game.UI";
2025-09-05 19:46:30 +08:00
2025-11-07 20:47:57 +08:00
[Header("路径设置")] [Tooltip("生成的UI脚本路径相对Assets")]
public string GenerateHolderCodePath = "Assets/Scripts/UI/Generated";
2025-09-05 19:46:30 +08:00
2025-11-07 20:47:57 +08:00
[Tooltip("UI Prefab根目录")] public string UIPrefabRootPath = "Assets/Art/UI/Prefabs";
2025-09-05 19:46:30 +08:00
2025-11-07 20:47:57 +08:00
[Header("加载类型")] [Tooltip("UI资源加载方式本地 / YooAsset / Addressable等")]
public EUIResLoadType LoadType = EUIResLoadType.Resources;
}
[Serializable]
public class StringPair
{
public string Key;
public string Value;
public StringPair(string key, string value)
{
Key = key;
Value = value;
}
2025-09-05 19:46:30 +08:00
}
}