5.2 KiB
5.2 KiB
Console 控制台模块 UI 结构说明
概述
Console模块是一个基于UGUI的日志控制台,用于实时显示Unity的日志信息(Info/Warning/Error/Exception)。
功能特性
- ✅ 实时捕获Unity日志(Application.logMessageReceived)
- ✅ 日志分类显示(Info/Warning/Error/Fatal)
- ✅ 日志过滤器(可以单独开关各类型日志)
- ✅ 锁定滚动到底部
- ✅ 点击日志查看详细堆栈信息
- ✅ 清除所有日志
- ✅ 日志颜色区分
- ✅ 最大日志行数限制(默认500行)
- ✅ 对象池优化性能
UI结构
Console Page 层次结构
ConsolePage (GameObject)
├── ControlPanel (水平布局)
│ ├── ClearButton (Button) - 清空日志按钮
│ ├── LockScrollToggle (Toggle) - 锁定滚动
│ ├── Spacer (空白区域)
│ ├── InfoFilterToggle (Toggle) - Info过滤器
│ ├── WarningFilterToggle (Toggle) - Warning过滤器
│ ├── ErrorFilterToggle (Toggle) - Error过滤器
│ └── FatalFilterToggle (Toggle) - Fatal过滤器
│
├── LogScrollView (ScrollRect) - 日志列表区域
│ └── LogContent (RectTransform) - 日志内容容器
│ └── [动态生成的日志项]
│
└── DetailScrollView (ScrollRect) - 详细信息区域
└── DetailText (TMP_Text) - 显示选中日志的详细信息和堆栈
日志项预制件结构 (ConsoleLogItemPrefab)
LogItem (GameObject)
├── Toggle (Toggle组件) - 用于选中日志
├── Background (Image) - 背景
└── Label (TMP_Text) - 显示日志文本
序列化字段配置
在 UniversalDebugTool 的 Inspector 中需要配置以下字段:
Console页面字段
[Header("控制台页面")]
consolePage // 控制台页面根对象
consoleLogScrollRect // 日志列表ScrollRect
consoleLogContent // 日志内容容器RectTransform
consoleDetailScrollRect // 详情ScrollRect
consoleDetailText // 详情文本TMP_Text
consoleClearButton // 清空按钮
consoleLockScrollToggle // 锁定滚动Toggle
consoleInfoFilterToggle // Info过滤Toggle
consoleWarningFilterToggle // Warning过滤Toggle
consoleErrorFilterToggle // Error过滤Toggle
consoleFatalFilterToggle // Fatal过滤Toggle
consoleLogItemPrefab // 日志项预制件
UI组件要求
1. ControlPanel
- 使用 HorizontalLayoutGroup
- 建议添加 ContentSizeFitter
- Padding: 10, 10, 10, 10
- Spacing: 10
2. LogScrollView
- ScrollRect 设置:
- Vertical: true
- Horizontal: false
- Movement Type: Elastic
- Scrollbar Visibility: Automatic If Needed
- LogContent 需要 VerticalLayoutGroup:
- Child Alignment: Upper Center
- Child Force Expand: Width
- Child Control Size: Height
- Spacing: 2
3. DetailScrollView
- ScrollRect 设置:
- Vertical: true
- Horizontal: false
- Movement Type: Clamped
- 建议高度: 150-200
- DetailText 设置:
- Enable Word Wrapping
- Overflow: Overflow
- Enable Rich Text
4. Toggles
- 每个Toggle需要一个Label (TMP_Text)
- 建议宽度: 100-120
- Toggle Group: 不需要(可以多选)
日志颜色配置
在 ConsoleModule 中默认的颜色:
Info: Color.white (255, 255, 255)
Warning: Color.yellow (255, 255, 0)
Error: Color.red (255, 0, 0)
Fatal: Color(0.7f, 0.2f, 0.2f) (178, 51, 51)
性能优化
- 对象池机制: 日志项使用对象池,避免频繁创建销毁
- 最大行数限制: 默认500行,防止内存溢出
- 按需刷新: 只在日志变化或过滤器改变时刷新显示
- Toggle优化: 使用Toggle而不是Button,减少重绘
使用示例
在代码中获取日志统计
if (UniversalDebugTool.InstanceExists)
{
var console = UniversalDebugTool.Instance.consoleModule;
if (console != null)
{
console.GetLogCount(out int info, out int warning, out int error, out int fatal);
Debug.Log($"日志统计 - Info:{info}, Warning:{warning}, Error:{error}, Fatal:{fatal}");
}
}
设置字体
UniversalDebugTool.SetSDFFont(myFont);
// 会自动应用到控制台模块
注意事项
- 日志项预制件: 必须包含 Toggle 和 TMP_Text 组件
- ScrollRect: 必须正确设置 Content 和 Viewport
- 性能: 大量日志时建议增加日志项的高度以减少可见数量
- 线程安全: 日志回调在主线程执行,无需担心线程问题
- 内存管理: 超过最大行数的日志会自动删除
与GameFramework的差异
| 特性 | GameFramework (GUI) | MeowmentDebugTool (UGUI) |
|---|---|---|
| UI系统 | OnGUI (即时模式) | UGUI (保留模式) |
| 性能 | 每帧重绘 | 按需刷新 |
| 布局 | GUILayout自动布局 | RectTransform + LayoutGroup |
| 交互 | GUILayout.Button/Toggle | Button/Toggle组件 |
| 对象池 | 不需要 | 使用对象池优化 |
| 滚动 | GUILayout.BeginScrollView | ScrollRect组件 |
未来扩展
可以考虑添加的功能:
- 搜索/过滤日志内容
- 导出日志到文件
- 日志标签/分类
- 日志统计图表
- 复制日志到剪贴板
- 日志时间范围过滤