From cf352f2a22e7eed5d4ddd5c4378bbf897fd4cfeb Mon Sep 17 00:00:00 2001 From: zhang hongbo Date: Mon, 6 Apr 2026 10:03:28 +0800 Subject: [PATCH] 11 --- .../Editor/CreateTabButtonPrefab.cs | 8 + .../Editor/DebugToolPrefabGenerator.cs | 24 + .../Runtime/ConsoleModule.cs | 62 +- .../Runtime/CustomButtonsModule.cs | 22 +- .../Runtime/CustomCheckBoxesModule.cs | 12 +- .../Runtime/CustomValuesModule.cs | 12 +- .../Runtime/DraggableFloatingButton.cs | 52 +- .../Runtime/ParametersModule.cs | 994 ++++++++++++++++-- .../Runtime/RuntimeUIGenerator.cs | 232 ++-- .../Runtime/SettingsModule.cs | 95 +- .../Runtime/UniversalDebugTool.cs | 38 +- .../package.json | 2 +- 12 files changed, 1274 insertions(+), 279 deletions(-) diff --git a/Packages/com.bywaystudios.meowmentdebugtool/Editor/CreateTabButtonPrefab.cs b/Packages/com.bywaystudios.meowmentdebugtool/Editor/CreateTabButtonPrefab.cs index 17e8448..5c92297 100644 --- a/Packages/com.bywaystudios.meowmentdebugtool/Editor/CreateTabButtonPrefab.cs +++ b/Packages/com.bywaystudios.meowmentdebugtool/Editor/CreateTabButtonPrefab.cs @@ -35,6 +35,10 @@ public class CreateTabButtonPrefab : EditorWindow TextMeshProUGUI text = textObj.AddComponent(); text.text = "Tab"; text.fontSize = 32; + text.fontStyle = FontStyles.Bold; + text.enableAutoSizing = true; + text.fontSizeMin = 12; + text.fontSizeMax = 72; text.alignment = TextAlignmentOptions.Center; text.color = Color.white; @@ -80,6 +84,10 @@ public class CreateTabButtonPrefab : EditorWindow TextMeshProUGUI text = textObj.AddComponent(); text.text = "Button"; text.fontSize = 24; + text.fontStyle = FontStyles.Bold; + text.enableAutoSizing = true; + text.fontSizeMin = 12; + text.fontSizeMax = 72; text.alignment = TextAlignmentOptions.Center; text.color = Color.white; text.enableWordWrapping = true; diff --git a/Packages/com.bywaystudios.meowmentdebugtool/Editor/DebugToolPrefabGenerator.cs b/Packages/com.bywaystudios.meowmentdebugtool/Editor/DebugToolPrefabGenerator.cs index 9f31eca..434920b 100644 --- a/Packages/com.bywaystudios.meowmentdebugtool/Editor/DebugToolPrefabGenerator.cs +++ b/Packages/com.bywaystudios.meowmentdebugtool/Editor/DebugToolPrefabGenerator.cs @@ -214,6 +214,10 @@ namespace MeowmentDebugTool.Editor TextMeshProUGUI text = textObj.AddComponent(); text.text = "✕"; text.fontSize = 48; + text.fontStyle = FontStyles.Bold; + text.enableAutoSizing = true; + text.fontSizeMin = 12; + text.fontSizeMax = 72; text.alignment = TextAlignmentOptions.Center; text.color = Color.white; @@ -260,6 +264,9 @@ namespace MeowmentDebugTool.Editor text.alignment = TextAlignmentOptions.Center; text.color = Color.white; text.fontStyle = FontStyles.Bold; + text.enableAutoSizing = true; + text.fontSizeMin = 12; + text.fontSizeMax = 72; // 默认隐藏 floatBtn.SetActive(false); @@ -690,6 +697,10 @@ namespace MeowmentDebugTool.Editor TextMeshProUGUI text = textObj.AddComponent(); text.text = "Tab"; text.fontSize = 32; + text.fontStyle = FontStyles.Bold; + text.enableAutoSizing = true; + text.fontSizeMin = 12; + text.fontSizeMax = 72; text.alignment = TextAlignmentOptions.Center; text.color = Color.white; @@ -722,6 +733,10 @@ namespace MeowmentDebugTool.Editor TextMeshProUGUI text = textObj.AddComponent(); text.text = "Button"; text.fontSize = 24; + text.fontStyle = FontStyles.Bold; + text.enableAutoSizing = true; + text.fontSizeMin = 12; + text.fontSizeMax = 72; text.alignment = TextAlignmentOptions.Center; text.color = Color.white; text.enableWordWrapping = true; @@ -813,6 +828,10 @@ namespace MeowmentDebugTool.Editor TextMeshProUGUI text = obj.AddComponent(); text.fontSize = 28; + text.fontStyle = FontStyles.Bold; + text.enableAutoSizing = true; + text.fontSizeMin = 12; + text.fontSizeMax = 72; text.color = Color.white; text.enableWordWrapping = true; @@ -844,6 +863,10 @@ namespace MeowmentDebugTool.Editor TextMeshProUGUI text = textObj.AddComponent(); text.text = label; text.fontSize = 32; + text.fontStyle = FontStyles.Bold; + text.enableAutoSizing = true; + text.fontSizeMin = 12; + text.fontSizeMax = 72; text.alignment = TextAlignmentOptions.Center; text.color = Color.white; @@ -900,6 +923,7 @@ namespace MeowmentDebugTool.Editor TextMeshProUGUI text = textObj.AddComponent(); text.text = ""; text.fontSize = 28; + text.fontStyle = FontStyles.Bold; text.color = Color.white; inputField.textViewport = textAreaRt; diff --git a/Packages/com.bywaystudios.meowmentdebugtool/Runtime/ConsoleModule.cs b/Packages/com.bywaystudios.meowmentdebugtool/Runtime/ConsoleModule.cs index fdc0fba..1e21531 100644 --- a/Packages/com.bywaystudios.meowmentdebugtool/Runtime/ConsoleModule.cs +++ b/Packages/com.bywaystudios.meowmentdebugtool/Runtime/ConsoleModule.cs @@ -31,6 +31,10 @@ namespace MeowmentDebugTool // 文字筛选 private TMP_InputField textFilterInputField; private string textFilter = ""; + private TMP_Text infoFilterLabel; + private TMP_Text warningFilterLabel; + private TMP_Text errorFilterLabel; + private TMP_Text fatalFilterLabel; // 日志项预制件 private GameObject logItemPrefab; @@ -77,6 +81,10 @@ namespace MeowmentDebugTool private int lastRefreshFrame = -1; private bool hasRegisteredLogCallback = false; private bool uiInitialized = false; + private int lastDisplayedInfoCount = -1; + private int lastDisplayedWarningCount = -1; + private int lastDisplayedErrorCount = -1; + private int lastDisplayedFatalCount = -1; #endregion #region 构造函数 @@ -185,6 +193,7 @@ namespace MeowmentDebugTool infoFilterToggle.onValueChanged.RemoveListener(OnInfoFilterChanged); infoFilterToggle.isOn = infoFilter; infoFilterToggle.onValueChanged.AddListener(OnInfoFilterChanged); + infoFilterLabel = infoFilterToggle.GetComponentInChildren(true); } if (warningFilterToggle != null) @@ -192,6 +201,7 @@ namespace MeowmentDebugTool warningFilterToggle.onValueChanged.RemoveListener(OnWarningFilterChanged); warningFilterToggle.isOn = warningFilter; warningFilterToggle.onValueChanged.AddListener(OnWarningFilterChanged); + warningFilterLabel = warningFilterToggle.GetComponentInChildren(true); } if (errorFilterToggle != null) @@ -199,6 +209,7 @@ namespace MeowmentDebugTool errorFilterToggle.onValueChanged.RemoveListener(OnErrorFilterChanged); errorFilterToggle.isOn = errorFilter; errorFilterToggle.onValueChanged.AddListener(OnErrorFilterChanged); + errorFilterLabel = errorFilterToggle.GetComponentInChildren(true); } if (fatalFilterToggle != null) @@ -206,6 +217,7 @@ namespace MeowmentDebugTool fatalFilterToggle.onValueChanged.RemoveListener(OnFatalFilterChanged); fatalFilterToggle.isOn = fatalFilter; fatalFilterToggle.onValueChanged.AddListener(OnFatalFilterChanged); + fatalFilterLabel = fatalFilterToggle.GetComponentInChildren(true); } if (textFilterInputField != null) @@ -288,9 +300,6 @@ namespace MeowmentDebugTool { logScrollRect.verticalNormalizedPosition = 0f; } - - // 更新Toggle文本显示 - UpdateFilterToggleText(); } /// @@ -453,6 +462,8 @@ namespace MeowmentDebugTool index++; displayCount++; } + + UpdateFilterToggleText(); } private bool ShouldShowLog(LogNode logNode) @@ -636,34 +647,27 @@ namespace MeowmentDebugTool } RefreshCount(); - - if (infoFilterToggle != null) + + UpdateFilterLabel(infoFilterLabel, "Info", infoCount, ref lastDisplayedInfoCount); + UpdateFilterLabel(warningFilterLabel, "Warning", warningCount, ref lastDisplayedWarningCount); + UpdateFilterLabel(errorFilterLabel, "Error", errorCount, ref lastDisplayedErrorCount); + UpdateFilterLabel(fatalFilterLabel, "Fatal", fatalCount, ref lastDisplayedFatalCount); + } + + private void UpdateFilterLabel(TMP_Text label, string prefix, int count, ref int lastDisplayedCount) + { + if (label == null) { - var label = infoFilterToggle.GetComponentInChildren(); - if (label != null) - label.text = $"Info ({infoCount})"; + return; } - - if (warningFilterToggle != null) + + if (lastDisplayedCount == count) { - var label = warningFilterToggle.GetComponentInChildren(); - if (label != null) - label.text = $"Warning ({warningCount})"; - } - - if (errorFilterToggle != null) - { - var label = errorFilterToggle.GetComponentInChildren(); - if (label != null) - label.text = $"Error ({errorCount})"; - } - - if (fatalFilterToggle != null) - { - var label = fatalFilterToggle.GetComponentInChildren(); - if (label != null) - label.text = $"Fatal ({fatalCount})"; + return; } + + label.text = $"{prefix} ({count})"; + lastDisplayedCount = count; } private void ClearAllLogs() @@ -673,6 +677,10 @@ namespace MeowmentDebugTool errorLogNodes.Clear(); fatalLogNodes.Clear(); selectedNode = null; + lastDisplayedInfoCount = -1; + lastDisplayedWarningCount = -1; + lastDisplayedErrorCount = -1; + lastDisplayedFatalCount = -1; if (detailText != null) detailText.text = "点击日志查看详细信息..."; diff --git a/Packages/com.bywaystudios.meowmentdebugtool/Runtime/CustomButtonsModule.cs b/Packages/com.bywaystudios.meowmentdebugtool/Runtime/CustomButtonsModule.cs index 9397733..711e867 100644 --- a/Packages/com.bywaystudios.meowmentdebugtool/Runtime/CustomButtonsModule.cs +++ b/Packages/com.bywaystudios.meowmentdebugtool/Runtime/CustomButtonsModule.cs @@ -15,14 +15,14 @@ namespace MeowmentDebugTool public class CustomButtonsModule : IDebugModule { #region 字段 - private const float SubTabCellWidth = 170f; - private const float SubTabCellHeight = 56f; + private const float SubTabCellWidth = 200f; + private const float SubTabCellHeight = 70f; private const float SubTabSpacingX = 8f; private const float SubTabSpacingY = 8f; private const int SubTabPaddingHorizontal = 20; private const int SubTabPaddingVertical = 20; private const float ButtonMinWidth = 260f; - private const float ButtonMaxWidth = 10000f; + private const float ButtonMaxWidth = 800f; private const float ButtonHeight = 90f; private const float ButtonSpacing = 10f; private const int ButtonsPerFrame = 12; @@ -625,6 +625,10 @@ namespace MeowmentDebugTool TMP_Text text = emptyText.AddComponent(); text.text = "未找到任何 DebugButton"; text.fontSize = 28; + text.fontStyle = FontStyles.Bold; + text.enableAutoSizing = true; + text.fontSizeMin = 12; + text.fontSizeMax = 72; text.alignment = TextAlignmentOptions.Center; text.color = new Color(1f, 1f, 1f, 0.8f); @@ -948,6 +952,10 @@ namespace MeowmentDebugTool TMP_Text text = textObj.AddComponent(); text.text = tabName; text.fontSize = 26; + text.fontStyle = FontStyles.Bold; + text.enableAutoSizing = true; + text.fontSizeMin = 12; + text.fontSizeMax = 72; text.alignment = TextAlignmentOptions.Center; text.color = Color.white; @@ -1265,8 +1273,8 @@ namespace MeowmentDebugTool if (buttonText != null) { buttonText.text = buttonInfo.DisplayName; - buttonText.enableWordWrapping = false; - buttonText.overflowMode = TextOverflowModes.Overflow; + buttonText.enableWordWrapping = true; + buttonText.overflowMode = TextOverflowModes.Truncate; // 应用保存的字体 if (savedFontAsset != null) @@ -1437,9 +1445,9 @@ namespace MeowmentDebugTool horizontalLayout.spacing = ButtonSpacing; horizontalLayout.padding = new RectOffset(0, 0, 0, 0); horizontalLayout.childAlignment = TextAnchor.UpperLeft; - horizontalLayout.childControlWidth = false; + horizontalLayout.childControlWidth = true; horizontalLayout.childControlHeight = true; - horizontalLayout.childForceExpandWidth = false; + horizontalLayout.childForceExpandWidth = true; horizontalLayout.childForceExpandHeight = false; ContentSizeFitter sizeFitter = rowObj.AddComponent(); diff --git a/Packages/com.bywaystudios.meowmentdebugtool/Runtime/CustomCheckBoxesModule.cs b/Packages/com.bywaystudios.meowmentdebugtool/Runtime/CustomCheckBoxesModule.cs index 3840d60..737119a 100644 --- a/Packages/com.bywaystudios.meowmentdebugtool/Runtime/CustomCheckBoxesModule.cs +++ b/Packages/com.bywaystudios.meowmentdebugtool/Runtime/CustomCheckBoxesModule.cs @@ -14,8 +14,8 @@ namespace MeowmentDebugTool public class CustomCheckBoxesModule : IDebugModule { #region 字段 - private const float SubTabCellWidth = 170f; - private const float SubTabCellHeight = 56f; + private const float SubTabCellWidth = 200f; + private const float SubTabCellHeight = 70f; private const float SubTabSpacingX = 8f; private const float SubTabSpacingY = 8f; private const int SubTabPaddingHorizontal = 20; @@ -270,6 +270,10 @@ namespace MeowmentDebugTool TMP_Text text = emptyText.AddComponent(); text.text = "未找到任何 DebugCheckBox"; text.fontSize = 28; + text.fontStyle = FontStyles.Bold; + text.enableAutoSizing = true; + text.fontSizeMin = 12; + text.fontSizeMax = 72; text.alignment = TextAlignmentOptions.Center; text.color = new Color(1f, 1f, 1f, 0.8f); @@ -445,6 +449,10 @@ namespace MeowmentDebugTool TMP_Text text = textObj.AddComponent(); text.text = tabName; text.fontSize = 26; + text.fontStyle = FontStyles.Bold; + text.enableAutoSizing = true; + text.fontSizeMin = 12; + text.fontSizeMax = 72; text.alignment = TextAlignmentOptions.Center; text.color = Color.white; diff --git a/Packages/com.bywaystudios.meowmentdebugtool/Runtime/CustomValuesModule.cs b/Packages/com.bywaystudios.meowmentdebugtool/Runtime/CustomValuesModule.cs index 2a68879..da39e43 100644 --- a/Packages/com.bywaystudios.meowmentdebugtool/Runtime/CustomValuesModule.cs +++ b/Packages/com.bywaystudios.meowmentdebugtool/Runtime/CustomValuesModule.cs @@ -14,8 +14,8 @@ namespace MeowmentDebugTool public class CustomValuesModule : IDebugModule { #region 字段 - private const float SubTabCellWidth = 170f; - private const float SubTabCellHeight = 56f; + private const float SubTabCellWidth = 200f; + private const float SubTabCellHeight = 70f; private const float SubTabSpacingX = 8f; private const float SubTabSpacingY = 8f; private const int SubTabPaddingHorizontal = 20; @@ -423,6 +423,10 @@ namespace MeowmentDebugTool TMP_Text text = emptyText.AddComponent(); text.text = "未找到任何 DebugValue"; text.fontSize = 28; + text.fontStyle = FontStyles.Bold; + text.enableAutoSizing = true; + text.fontSizeMin = 12; + text.fontSizeMax = 72; text.alignment = TextAlignmentOptions.Center; text.color = new Color(1f, 1f, 1f, 0.8f); @@ -599,6 +603,10 @@ namespace MeowmentDebugTool TMP_Text text = textObj.AddComponent(); text.text = tabName; text.fontSize = 26; + text.fontStyle = FontStyles.Bold; + text.enableAutoSizing = true; + text.fontSizeMin = 12; + text.fontSizeMax = 72; text.alignment = TextAlignmentOptions.Center; text.color = Color.white; diff --git a/Packages/com.bywaystudios.meowmentdebugtool/Runtime/DraggableFloatingButton.cs b/Packages/com.bywaystudios.meowmentdebugtool/Runtime/DraggableFloatingButton.cs index 799f95f..f054b40 100644 --- a/Packages/com.bywaystudios.meowmentdebugtool/Runtime/DraggableFloatingButton.cs +++ b/Packages/com.bywaystudios.meowmentdebugtool/Runtime/DraggableFloatingButton.cs @@ -1,6 +1,7 @@ using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; +using TMPro; namespace MeowmentDebugTool { @@ -38,6 +39,13 @@ namespace MeowmentDebugTool private bool hasDragged = false; // 标记本次操作是否进行了拖动 private Vector2 dragStartPosition; // 拖动起始位置 private const float dragThreshold = 5f; // 拖动阈值,移动超过这个距离才算拖动 + private const float FpsRefreshInterval = 0.25f; + + private TMP_Text titleText; + private TMP_Text fpsText; + private TMP_Text fallbackText; + private float smoothedUnscaledDeltaTime = 1f / 60f; + private float nextFpsRefreshTime = 0f; private void Awake() { @@ -50,6 +58,12 @@ namespace MeowmentDebugTool } targetPosition = rectTransform.anchoredPosition; + titleText = transform.Find("ContentCanvas/TitleText")?.GetComponent() + ?? transform.Find("TitleText")?.GetComponent(); + fpsText = transform.Find("ContentCanvas/FpsText")?.GetComponent() + ?? transform.Find("FpsText")?.GetComponent(); + fallbackText = transform.Find("Text")?.GetComponent(); + UpdateFpsDisplay(true); } private void Update() @@ -69,6 +83,39 @@ namespace MeowmentDebugTool isSnapping = false; } } + + smoothedUnscaledDeltaTime = Mathf.Lerp(smoothedUnscaledDeltaTime, Time.unscaledDeltaTime, 0.12f); + if (Time.unscaledTime >= nextFpsRefreshTime) + { + nextFpsRefreshTime = Time.unscaledTime + FpsRefreshInterval; + UpdateFpsDisplay(false); + } + } + + private void UpdateFpsDisplay(bool force) + { + if (!force && !gameObject.activeInHierarchy) + { + return; + } + + int fps = Mathf.Clamp(Mathf.RoundToInt(1f / Mathf.Max(0.0001f, smoothedUnscaledDeltaTime)), 0, 999); + + if (titleText != null) + { + titleText.text = "调试"; + } + + if (fpsText != null) + { + fpsText.text = $"{fps} FPS"; + return; + } + + if (fallbackText != null) + { + fallbackText.text = $"调试\n{fps} FPS"; + } } /// @@ -77,7 +124,6 @@ namespace MeowmentDebugTool public void OnPointerDown(PointerEventData eventData) { hasDragged = false; // 重置拖动标记 - Debug.Log("[DraggableFloatingButton] OnPointerDown - 重置拖动标记"); } public void OnBeginDrag(PointerEventData eventData) @@ -165,17 +211,13 @@ namespace MeowmentDebugTool /// public void OnPointerClick(PointerEventData eventData) { - Debug.Log($"[DraggableFloatingButton] OnPointerClick 被触发,hasDragged={hasDragged}"); - // 如果进行了拖动,不执行点击操作 if (hasDragged) { - Debug.Log("[!] 检测到拖动,不打开窗口"); return; } // 纯点击操作,打开调试窗口 - Debug.Log("[OK] 点击浮窗,打开调试窗口"); UniversalDebugTool debugTool = FindObjectOfType(); if (debugTool != null) { diff --git a/Packages/com.bywaystudios.meowmentdebugtool/Runtime/ParametersModule.cs b/Packages/com.bywaystudios.meowmentdebugtool/Runtime/ParametersModule.cs index 1f48126..a59412b 100644 --- a/Packages/com.bywaystudios.meowmentdebugtool/Runtime/ParametersModule.cs +++ b/Packages/com.bywaystudios.meowmentdebugtool/Runtime/ParametersModule.cs @@ -1,37 +1,105 @@ +using System; +using System.Collections.Generic; +using System.Text; using UnityEngine; +using UnityEngine.Profiling; using TMPro; using UnityEngine.UI; namespace MeowmentDebugTool { /// - /// 参数查看模块 - 显示设备和系统信息 + /// 参数查看模块 - 仿 GameFramework Debugger 风格,带多级子标签页 + /// 一级标签: Information / Profiler / Language + /// Information 子标签: System / Environment / Screen / Input / Other / Quality + /// Profiler 子标签: Summary / Memory + /// Language 标签: 中英文切换 /// public class ParametersModule : IDebugModule { #region 字段 + private GameObject parametersPage; - private TMP_Text deviceInfoText; + // UI 根容器(由外部传入或内部构建) + private RectTransform rootContainer; + + // ---- 一级标签 ---- + private readonly List