using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using UnityEngine.UI; using System.IO; using System.Text; public class PSDTOUGUIProcessor { [UnityEditor.MenuItem("Assets/PSDTOUGUI后处理")] public static void BaseSettings() { GameObject go = Selection.activeGameObject; if (go == null) { return; } // go.AddMissingComponent(); // go.AddMissingComponent(); // go.AddMissingComponent(); } [UnityEditor.MenuItem("Assets/新UI处理")] public static void NewUIHandle() { GameObject go = Selection.activeGameObject; if (go == null) { return; } if (!go.name.EndsWith("Win")) { Debug.LogError("请选择正确的UI UI应该以Win结尾"); return; } go.AddMissingComponent(); go.AddMissingComponent(); go.AddMissingComponent(); var graphics = go.GetComponentsInChildren(true); foreach (Graphic g in graphics) { g.raycastTarget = false; } } [UnityEditor.MenuItem("GameObject/生成UI脚本", false, 10)] public static void GenerateUIScript() { GameObject go = Selection.activeGameObject; if (go == null) { Debug.LogError("请先选择一个GameObject"); return; } string className = go.name; string targetFolder = Path.Combine(Application.dataPath, "Scripts/Main/UI"); // 确保目标文件夹存在 if (!Directory.Exists(targetFolder)) { Directory.CreateDirectory(targetFolder); } string filePath = Path.Combine(targetFolder, className + ".cs"); // 检查文件是否已存在 if (File.Exists(filePath)) { if (!EditorUtility.DisplayDialog("文件已存在", $"文件 {className}.cs 已存在,是否覆盖?", "覆盖", "取消")) { return; } } // 生成脚本内容 StringBuilder sb = new StringBuilder(); sb.AppendLine("using UnityEngine;"); sb.AppendLine("using System.Collections;"); sb.AppendLine("using System.Collections.Generic;"); sb.AppendLine("using UnityEngine.UI;"); sb.AppendLine("using DG.Tweening;"); sb.AppendLine("using Cysharp.Threading.Tasks;"); sb.AppendLine(""); sb.AppendLine($"public class {className} : UIBase"); sb.AppendLine("{"); sb.AppendLine(" // 组件引用"); sb.AppendLine(""); sb.AppendLine(" // 生命周期"); sb.AppendLine(" protected override void Awake()"); sb.AppendLine(" {"); sb.AppendLine(" base.Awake();"); sb.AppendLine(" // 初始化组件引用"); sb.AppendLine(" }"); sb.AppendLine(""); sb.AppendLine(" protected override void Start()"); sb.AppendLine(" {"); sb.AppendLine(" base.Start();"); sb.AppendLine(" // 初始化数据"); sb.AppendLine(" }"); sb.AppendLine(""); sb.AppendLine(" // UI事件"); sb.AppendLine(" protected override void OnOpen()"); sb.AppendLine(" {"); sb.AppendLine(" base.OnOpen();"); sb.AppendLine(" // 窗口打开时的逻辑"); sb.AppendLine(" }"); sb.AppendLine(""); sb.AppendLine(" protected override void OnClose()"); sb.AppendLine(" {"); sb.AppendLine(" base.OnClose();"); sb.AppendLine(" // 窗口关闭时的逻辑"); sb.AppendLine(" }"); sb.AppendLine(""); sb.AppendLine(" public override void Refresh()"); sb.AppendLine(" {"); sb.AppendLine(" base.Refresh();"); sb.AppendLine(" // 刷新UI显示"); sb.AppendLine(" }"); sb.AppendLine("}"); // 写入文件 File.WriteAllText(filePath, sb.ToString(), Encoding.UTF8); Debug.Log($"UI脚本已生成: {filePath}"); // 刷新资源数据库以显示新文件 AssetDatabase.Refresh(); // 打开生成的脚本 UnityEditorInternal.InternalEditorUtility.OpenFileAtLineExternal(filePath, 1); } }