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

234 lines
6.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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<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` 构造函数参数顺序(破坏性更新)
- 📝 更新文档和示例代码