# MeowmentDebugTool 新功能说明 ## 更新日期 2025年12月30日 ## 新增功能 ### 1. 获取Debugger显示状态 新增了一个公共静态方法 `IsDebuggerVisible()`,用于获取Debugger的当前显示状态。 #### 使用方法 ```csharp // 获取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` 特性时,在第一个参数指定组名: ```csharp 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` 特性的新参数顺序: ```csharp 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. **兼容性**: 这是一个破坏性更新,旧代码需要调整参数顺序 **旧代码**: ```csharp [DebugButton("按钮名称")] ``` **新代码** (需要添加组名): ```csharp [DebugButton("默认", "按钮名称")] ``` 2. **组名建议**: - 使用简短明确的组名(如:玩家、关卡、道具、系统等) - 相关功能的按钮放在同一组 - 常用功能建议放在"默认"组 3. **性能**: 分组功能不会影响性能,因为: - 只在初始化和手动重载时扫描方法 - 所有按钮一次性创建,无需动态切换 --- ## 示例代码 完整的使用示例请参考 `Assets/Scenes/Scripts/Test.cs` 文件。 ## 向后兼容性说明 ⚠️ **重要**: `DebugButton` 特性的参数顺序已更改,旧代码需要手动调整。 如果你之前这样使用: ```csharp [DebugButton("我的按钮", 0.5f, 0.5f, 0.5f)] ``` 现在需要改为: ```csharp [DebugButton("默认", "我的按钮", 0.5f, 0.5f, 0.5f)] ``` 或者如果不需要自定义颜色: ```csharp [DebugButton("默认", "我的按钮")] ``` **注意**:请确保在文件顶部添加 `using MeowmentDebugTool;` --- ## 技术细节 ### CustomButtonsModule 的改动 1. 添加了分组数据结构 `Dictionary>` 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` 构造函数参数顺序(破坏性更新) - 📝 更新文档和示例代码