| | |
| | | using UnityEngine; |
| | | using UnityEditor; |
| | | using UnityEngine.UI; |
| | | using System.IO; |
| | | using System.Text; |
| | | |
| | | public class PSDTOUGUIProcessor |
| | | { |
| | |
| | | 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); |
| | | |
| | | } |
| | | } |