MeowmentDebugTool/新功能说明.md
2026-02-03 10:32:06 +08:00

6.4 KiB
Raw Blame History

MeowmentDebugTool 新功能说明

更新日期

2025年12月30日

新增功能

1. 获取Debugger显示状态

新增了一个公共静态方法 IsDebuggerVisible()用于获取Debugger的当前显示状态。

使用方法

// 获取Debugger是否正在显示
bool isVisible = UniversalDebugTool.IsDebuggerVisible();

if (isVisible)
{
    Debug.Log("Debugger正在显示");
}
else
{
    Debug.Log("Debugger已隐藏或未初始化");
}

方法说明

  • 方法签名: public static bool IsDebuggerVisible()
  • 返回值:
    • true - Debugger正在显示主窗口或悬浮按钮可见
    • false - Debugger完全隐藏或未初始化
  • 使用场景:
    • 判断是否需要显示/隐藏Debugger
    • 根据Debugger状态执行不同的逻辑
    • 在截图或录屏前检查Debugger状态

2. 按钮分组功能

为调试按钮添加了分组功能,可以将按钮按功能分类显示,提高大量按钮时的使用体验。

使用方法

在使用 DebugButton 特性时,在第一个参数指定组名:

using MeowmentDebugTool;

#if MEOWMENT_DEBUG_TOOL
// 默认组
[DebugButton("默认", "我的按钮")]
public static void MyButton()
{
    Debug.Log("按钮被点击");
}

// 玩家相关按钮
[DebugButton("玩家", "加金币")]
public static void AddGold()
{
    Debug.Log("给玩家加了1000金币");
}

[DebugButton("玩家", "升级")]
public static void LevelUp()
{
    Debug.Log("玩家升了1级");
}

// 关卡相关按钮
[DebugButton("关卡", "跳过当前关卡")]
public static void SkipLevel()
{
    Debug.Log("跳过当前关卡");
}

[DebugButton("关卡", "解锁所有关卡", 0.8f, 0.6f, 0.2f)]
public static void UnlockAllLevels()
{
    Debug.Log("解锁所有关卡");
}
#endif

注意:确保在文件顶部添加 using MeowmentDebugTool; 以便可以直接使用 DebugButton 特性。

特性参数说明

DebugButton 特性的新参数顺序:

DebugButtonAttribute(
    string groupName = "默认",      // 组名(新增)
    string displayName = "",        // 显示名称
    float r = 0.8f,                 // 按钮颜色 R
    float g = 0.8f,                 // 按钮颜色 G
    float b = 0.8f                  // 按钮颜色 B
)

功能特点

  1. 自动分组: 系统会自动收集所有带有 DebugButton 特性的方法,并按组名分类
  2. 组标题显示: 每个组会显示一个标题行,标题格式为:━━━━━━ 组名 ━━━━━━
  3. 默认组: 如果不指定组名或组名为空,按钮会被归入"默认"组
  4. 组排序: "默认"组会排在最前面,其他组按字母顺序排列
  5. 一次显示所有: 所有组的按钮会在一个滚动视图中垂直显示,无需切换

界面布局

┌─────────────────────────────────┐
│  ━━━━━━ 默认 ━━━━━━            │ ← 组标题
│  [测试按钮1]                     │
│  [测试按钮2]                     │ ← 该组的按钮
│                                 │
│  ━━━━━━ 玩家 ━━━━━━            │ ← 组标题
│  [加金币]                       │
│  [升级]                         │
│  [满血复活]                     │ ← 该组的按钮
│                                 │
│  ━━━━━━ 关卡 ━━━━━━            │ ← 组标题
│  [跳过当前关卡]                 │
│  [重置关卡进度]                 │
│  [解锁所有关卡]                 │ ← 该组的按钮
│  ...                            │
└─────────────────────────────────┘

注意事项

  1. 兼容性: 这是一个破坏性更新,旧代码需要调整参数顺序

    旧代码:

    [DebugButton("按钮名称")]
    

    新代码 (需要添加组名):

    [DebugButton("默认", "按钮名称")]
    
  2. 组名建议:

    • 使用简短明确的组名(如:玩家、关卡、道具、系统等)
    • 相关功能的按钮放在同一组
    • 常用功能建议放在"默认"组
  3. 性能: 分组功能不会影响性能,因为:

    • 只在初始化和手动重载时扫描方法
    • 所有按钮一次性创建,无需动态切换

示例代码

完整的使用示例请参考 Assets/Scenes/Scripts/Test.cs 文件。

向后兼容性说明

⚠️ 重要: DebugButton 特性的参数顺序已更改,旧代码需要手动调整。

如果你之前这样使用:

[DebugButton("我的按钮", 0.5f, 0.5f, 0.5f)]

现在需要改为:

[DebugButton("默认", "我的按钮", 0.5f, 0.5f, 0.5f)]

或者如果不需要自定义颜色:

[DebugButton("默认", "我的按钮")]

注意:请确保在文件顶部添加 using MeowmentDebugTool;


技术细节

CustomButtonsModule 的改动

  1. 添加了分组数据结构 Dictionary<string, List<ButtonInfo>>
  2. 添加了分组UI容器的自动创建逻辑
  3. 修改了按钮加载流程,先分组再显示
  4. 添加了组切换功能和视觉反馈

UniversalDebugTool 的改动

  1. 添加了 IsDebuggerVisible() 方法
  2. 修改了 DebugButtonAttribute 的构造函数,添加了 groupName 参数
  3. 更新了文档注释

常见问题

Q: 如何知道当前有哪些组?

A: 在初始化时,控制台会输出所有找到的组及其按钮数量:

[CustomButtonsModule] 共找到 3 个按钮组
  - 默认: 2 个按钮
  - 玩家: 3 个按钮
  - 关卡: 3 个按钮

Q: 能否动态添加组?

A: 可以,调用 ReloadCustomButtons() 方法即可重新扫描所有按钮并更新分组。

Q: 分组按钮的样式可以自定义吗?

A: 可以,分组按钮使用与普通按钮相同的预制件,可以通过修改预制件来自定义样式。

Q: IsDebuggerVisible() 什么情况下返回 false

A: 以下情况会返回 false

  • Debugger 未初始化(未调用 Init()
  • 主窗口和悬浮按钮都被隐藏
  • Debugger GameObject 被销毁

更新日志

v1.1.0 (2025-12-30)

  • 新增 IsDebuggerVisible() 方法用于获取显示状态
  • 新增按钮分组功能
  • 🔧 修改 DebugButtonAttribute 构造函数参数顺序(破坏性更新)
  • 📝 更新文档和示例代码