三国卡牌客户端基础资源仓库
18 子 2D卡牌客户端搭建 / 2D卡牌客户端搭建 新增SortingLayer UI, UI调试器
1个文件已修改
2个文件已添加
133 ■■■■■ 已修改文件
Assets/Editor/UI/UIAdjustEditor.cs 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Editor/UI/UIAdjustEditor.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ProjectSettings/TagManager.asset 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Editor/UI/UIAdjustEditor.cs
New file
@@ -0,0 +1,119 @@
using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
public class UIAdjustEditor : EditorWindow
{
    private string uiName = "";
    private bool destroyOnClose = false;
    private Vector2 scrollPos;
    [MenuItem("Tools/UI 调试工具")]
    public static void ShowWindow()
    {
        GetWindow<UIAdjustEditor>("UI 调试工具");
    }
    void OnGUI()
    {
        EditorGUILayout.LabelField("UI 调试工具", EditorStyles.boldLabel);
        EditorGUILayout.Space();
        uiName = EditorGUILayout.TextField("界面名字", uiName);
        destroyOnClose = EditorGUILayout.Toggle("关闭时销毁", destroyOnClose);
        EditorGUILayout.BeginHorizontal();
        if (GUILayout.Button("打开 UI"))
        {
            if (Application.isPlaying && !string.IsNullOrEmpty(uiName))
            {
                UIManager.Instance.OpenWindow(uiName);
            }
            else
            {
                Debug.LogWarning("请在运行时操作,并输入界面名字。");
            }
        }
        if (GUILayout.Button("关闭 UI"))
        {
            if (Application.isPlaying && !string.IsNullOrEmpty(uiName))
            {
                UIManager.Instance.CloseWindow(uiName, destroyOnClose);
            }
            else
            {
                Debug.LogWarning("请在运行时操作,并输入界面名字。");
            }
        }
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.Space();
        EditorGUILayout.LabelField("当前已打开的界面:", EditorStyles.boldLabel);
        if (Application.isPlaying)
        {
            scrollPos = EditorGUILayout.BeginScrollView(scrollPos, GUILayout.Height(200));
            var dict = GetOpenUIDict();
            if (dict.Count == 0)
            {
                EditorGUILayout.LabelField("无已打开的界面");
            }
            else
            {
                foreach (var kv in dict)
                {
                    EditorGUILayout.BeginHorizontal();
                    // 名字做成按钮
                    if (GUILayout.Button($"{kv.Key}  (数量: {kv.Value})", GUILayout.Width(200)))
                    {
                        // 通过反射获取UI GameObject
                        var mgr = UIManager.Instance;
                        var field = typeof(UIManager).GetField("uiDict", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
                        if (field != null)
                        {
                            var uiDict = field.GetValue(mgr) as Dictionary<string, List<UIBase>>;
                            if (uiDict != null && uiDict.TryGetValue(kv.Key, out var list) && list != null && list.Count > 0)
                            {
                                var ui = list[0];
                                if (ui != null && ui.gameObject != null)
                                {
                                    Selection.activeObject = ui.gameObject;
                                    EditorGUIUtility.PingObject(ui.gameObject);
                                }
                            }
                        }
                    }
                    EditorGUILayout.EndHorizontal();
                }
            }
            EditorGUILayout.EndScrollView();
        }
        else
        {
            EditorGUILayout.HelpBox("请在运行时查看已打开的界面。", MessageType.Info);
        }
    }
    /// <summary>
    /// 获取当前已打开的UI名称及数量
    /// </summary>
    private Dictionary<string, int> GetOpenUIDict()
    {
        var result = new Dictionary<string, int>();
        var mgr = UIManager.Instance;
        var field = typeof(UIManager).GetField("uiDict", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
        if (field != null)
        {
            var dict = field.GetValue(mgr) as Dictionary<string, List<UIBase>>;
            if (dict != null)
            {
                foreach (var kv in dict)
                {
                    if (kv.Value != null && kv.Value.Count > 0)
                        result[kv.Key] = kv.Value.Count;
                }
            }
        }
        return result;
    }
}
Assets/Editor/UI/UIAdjustEditor.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 90660ccae9cbfef40acbd5fac20c0734
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
ProjectSettings/TagManager.asset
@@ -41,3 +41,6 @@
  - name: Default
    uniqueID: 0
    locked: 0
  - name: UI
    uniqueID: 36244067
    locked: 0