跳到主要内容

运行时监控

游戏事件监控器是一个强大的实时调试和分析工具,提供对运行时事件系统行为的全面洞察。它帮助您识别性能瓶颈、跟踪事件流、监控监听器关系并调试复杂的事件链。


🎯 为什么使用运行时监控器?

强大的功能

运行时监控器改变了您开发和调试事件驱动游戏的方式:

  • 🔍 实时可见性 - 准确地看到事件何时以及如何在发生时被触发
  • ⚡ 性能分析 - 识别慢速监听器并优化执行时间
  • 📊 统计分析 - 跟踪事件频率、模式和使用趋势
  • 🔗 流程可视化 - 一目了然地理解复杂的触发器和链关系
  • ⚠️ 自动警告 - 及早发现性能问题和潜在问题
  • 👂 监听器检查器 - 监控所有活动订阅及其来源
  • 📝 事件日志 - 完整的执行历史记录,带有用于调试的堆栈跟踪

这对您的开发意味着什么

开发优势
  • 更快的调试:立即查看哪些事件触发以及按什么顺序
  • 性能优化:在影响游戏玩法之前识别并修复慢速监听器
  • 架构理解:可视化事件流以维护清晰的系统设计
  • 主动问题检测:自动捕获内存泄漏和递归调用等问题
  • 团队协作:与团队成员共享事件流的可视化表示

🚀 打开监控器

该实用工具位于**游戏事件系统**中,您可以通过以下方法访问:

从系统仪表板:

游戏事件系统窗口 → 点击"Game Event Monitor"

alt text

窗口管理

监控器窗口可以与其他Unity编辑器窗口一起停靠,以便在播放模式期间方便访问。我建议将其停靠在控制台或Inspector窗口附近。


📱 界面概览

初始窗口状态

当您第一次打开游戏事件监控器时,您将看到窗口处于停止状态(不在播放模式):

Monitor Window - Stopped State

停止状态下的关键元素:

  • 标题栏 - 显示游戏事件系统徽标和窗口标题
  • 状态指示器 - 显示灰色的"○ Stopped"(不在播放模式)
  • 调试器切换 - 启用/禁用事件跟踪的按钮
  • 选项卡导航 - 8个主要选项卡(在播放模式之前呈灰色)
  • 播放模式提示 - 引导您进入播放模式的中央消息
需要播放模式

运行时监控器仅在播放模式期间收集和显示数据。在编辑模式下禁用所有监控功能以避免性能开销。


窗口组件

监控器界面由几个关键区域组成:

1. 标题栏

位于窗口顶部,标题包含:

  • 🎮 徽标与标题 - 视觉品牌和窗口标识

  • 状态徽章 - 显示当前状态:

    • Running(绿色)- 播放模式处于活动状态,监控事件
    • Stopped(灰色)- 编辑模式,无监控
  • 调试器切换 - 控制是否正在跟踪事件:

    • Debugger ON(绿色)- 主动记录事件
    • Debugger OFF(红色)- 不记录(节省性能)

2. 导航工具栏

在标题下方,您会找到主导航选项卡:

选项卡图标目的
Dashboard📊所有监控数据的概览
Performance执行时间分析和分析
Recent📝按时间顺序排列的事件日志
Statistics📈事件频率和使用模式
Warnings性能问题和问题
Listeners👂活动订阅概览
Automation🔗触发器和链流程可视化
Details🔍深入了解选定的事件

3. 搜索与控制

在工具栏右侧:

  • 搜索字段 - 跨所有选项卡过滤事件
  • 清除菜单 - 清除不同数据类型的选项

📊 仪表板选项卡

仪表板提供整个事件系统健康状况和活动的高级概览。

Dashboard Tab - Running State

指标卡

在顶部,四个指标卡显示关键统计信息:

📊 总事件数

  • 显示内容:游戏中唯一事件的数量
  • 包括:所有活动数据库中的所有事件
  • 使用场景:了解事件系统的规模

📝 总日志数

  • 显示内容:记录的事件执行数量
  • 更新:事件触发时实时更新
  • 使用场景:跟踪整体系统活动

⚡ 已监控

  • 显示内容:具有性能数据的事件数量
  • 标准:仅触发的事件
  • 使用场景:查看哪些事件有分析信息

⚠ 警告

  • 显示内容:活动性能警告的计数
  • 颜色:如果存在任何警告则为红色
  • 使用场景:快速问题检测

活动数据库部分

显示所有当前加载的游戏事件数据库:

📁 活动数据库 (2)
├─ CoreEvents [42个事件] [PRIMARY]
└─ UIEvents [18个事件]

显示的信息:

  • 数据库名称和资产引用
  • 每个数据库的总事件计数
  • 主数据库的PRIMARY徽章
  • 点击数据库名称在项目窗口中选择它

性能概览

事件执行健康状况的可视化表示:

性能级别:

  • ✓ 良好(绿色)- 执行时间 < 1ms
  • ⚠ 警告(黄色)- 执行时间 1-10ms
  • ❌ 严重(红色)- 执行时间 > 10ms

可视化分解:

  • 显示分布的彩色条
  • 每个类别中的事件百分比
  • 所有事件的平均执行时间
  • 点击"View All →"跳转到性能选项卡
性能目标

目标是将90%以上的事件保持在"良好"类别中,以实现流畅的游戏玩法。"严重"类别中的事件应立即优化。

最近活动

显示最后触发的15个事件:

每个条目显示:

  • [时间戳] - 事件触发时间(HH:MM:SS.mmm)
  • 事件名称 - 触发的事件
  • 事件类型 - 泛型类型(例如,GameEvent<int>

快速操作:

  • 点击任何条目查看完整详情
  • 条目在播放模式期间实时更新
  • 点击"View All →"查看完整历史记录

快速警告

如果有任何警告处于活动状态,它们会出现在底部:

警告类型:

  • 🔥 性能 - 事件执行太慢
  • ⚠️ 高频率 - 事件触发太频繁
  • 💾 内存 - 潜在的内存问题
  • 🔄 递归 - 可能的无限循环

对于每个警告:

  • 严重性指示器(颜色编码)
  • 问题的清晰描述
  • 受影响的事件数量
  • 点击"View All →"查看完整列表

⚡ 性能选项卡

每个已触发事件的详细性能分析。

Performance Tab - Running State

排序控制

在选项卡顶部,您可以对性能数据进行排序:

排序选项:

  • Avg Time ⬇️ - 平均执行时间(默认,降序)
  • Max Time - 最大记录执行时间
  • Exec Count - 执行次数
  • Listeners - 平均监听器数量

排序方向:

  • ⬇️ 降序(从高到低)
  • ⬆️ 升序(从低到高)
  • 再次点击同一按钮以切换方向

性能表

每行显示单个事件的综合指标:

描述颜色编码
图标性能级别指示器🟢 良好 / 🟡 警告 / 🔴 严重
事件名称事件的完整名称蓝色(可点击)
平均时间平均执行持续时间绿色 < 1ms,黄色 1-10ms,红色 > 10ms
最小时间记录的最快执行灰色
最大时间记录的最慢执行如果 > 10ms则为红色
计数总执行次数白色
监听器平均监听器数量白色
GC垃圾回收分配如果 > 0则为红色,如果为0则为灰色
👂查看监听器按钮打开监听器选项卡

读取性能数据

示例行:

🟢 PlayerHealthChanged  1.2ms  0.8ms  3.5ms  Count: 156  Listeners: 4  GC: 0  [👂]

解释:

  • ✅ 事件性能良好(绿色图标)
  • 平均执行1.2ms(可接受)
  • 最快执行为0.8ms
  • 最慢执行为3.5ms
  • 已触发156次
  • 有4个活动监听器
  • 无GC分配(优秀!)
性能红旗
  • 平均时间 > 5ms:应该优化
  • 最大时间 > 16ms:将导致帧丢失
  • GC > 0:创建垃圾,重构以避免分配
  • 高监听器计数:考虑合并监听器

快速操作

  • 👂 按钮:跳转到此特定事件的监听器选项卡
  • 点击行:选择事件以在详情选项卡中查看
  • 搜索:实时按名称过滤事件

📝 最近事件选项卡

所有事件执行的完整时间顺序日志。

Recent Events Tab - Running State

控制选项

在选项卡顶部:

切换选项:

  • ☑️ 自动滚动 - 自动滚动到最新事件
  • 显示堆栈跟踪 - 显示每个事件的调用堆栈

状态指示器:

  • "Showing X of Y" - 显示有多少事件可见

操作:

  • 🗑 清除日志 - 删除所有记录的事件

日志条目格式

每个日志条目显示:

[14:23:45.123]  F:1250  PlayerTakeDamage  <GameEvent<GameObject, DamageInfo>>  [Details]
📍 Called by: EnemyController.Attack()

条目组件:

  • [时间戳] - 精确的执行时间(HH:MM:SS.mmm)
  • F:#### - 事件触发时的帧号
  • 事件名称 - 触发的事件名称
  • [类型] - 泛型类型签名
  • [Details] - 查看完整信息的按钮
  • 📍 调用者信息 - 触发事件的方法

堆栈跟踪视图

当启用显示堆栈跟踪时,每个条目展开以显示:

at GameEventSystem.GameEvent.Raise()
at PlayerController.TakeDamage(float amount) in Assets/Scripts/Player.cs:line 45
at EnemyController.Attack() in Assets/Scripts/Enemy.cs:line 89
...

使用场景:

  • 追踪事件触发的位置
  • 调试意外的事件调用
  • 理解执行流程
  • 识别调用代码中的性能瓶颈

搜索与过滤

使用搜索框按以下方式过滤日志:

  • 事件名称(例如,"Player")
  • 事件类型(例如,"GameObject")
  • 部分匹配有效
调试工作流
  1. 启用自动滚动以查看事件发生时的情况
  2. 当您发现问题时,禁用自动滚动
  3. 启用显示堆栈跟踪以查看调用层次结构
  4. 点击Details查看完整的事件信息
  5. 使用此数据追踪并修复问题

📈 统计选项卡

分析事件使用模式和随时间变化的频率。

Statistics Tab - Running State

排序控制

按不同指标对统计信息进行排序:

排序选项:

  • Count ⬇️ - 总触发次数(默认)
  • Frequency - 每秒触发次数
  • Last Trigger - 最近触发的事件

统计表

每行显示使用指标:

描述解释
事件名称事件名称蓝色,可点击
计数总执行次数绿色,越高 = 使用越多
频率/秒每秒触发次数如果 > 60/秒则为红色
平均间隔触发之间的平均时间以秒为单位
上次触发自上次执行以来的时间相对时间
查看日志查看此事件的所有日志打开详情选项卡

理解频率数据

示例行:

PlayerMoved  Count: 2,450  Freq/sec: 30.2/s  Avg Interval: 0.033s  Last Trigger: 2s ago  [View Logs]

分析:

  • 事件总共触发了2,450次
  • 每秒触发约30次(30 FPS时每帧)
  • 触发之间平均0.033秒
  • 2秒前最后触发

频率解释:

  • < 1/秒:罕见事件(boss生成、关卡转换)
  • 1-10/秒:常规事件(能力冷却、拾取)
  • 10-60/秒:高频率(移动、输入轮询)
  • > 60/秒:⚠️ 非常高,可能需要优化
高频率警告

触发频率 > 60/秒的事件显示为红色。虽然这并不总是问题,但它可能表明:

  • 冗余的事件触发
  • Update()中的事件应该在FixedUpdate()中
  • 可以批处理的不必要的事件流量

使用场景

识别未使用的事件:

  • 计数升序排序
  • 计数低的事件可能是死代码

查找性能热点:

  • 频率降序排序
  • 高频率事件应该高度优化

调试事件时间:

  • 检查平均间隔以理解事件模式
  • 不规则间隔可能表明错误

跟踪最近活动:

  • 上次触发降序排序
  • 查看哪些事件当前处于活动状态

⚠️ 警告选项卡

自动检测性能问题和潜在问题。

Warnings Tab - Running State

警告类别

系统自动检测几种类型的问题:

🔥 性能问题

慢执行:

❌ 严重
慢事件执行
事件执行时间过长(平均 > 10ms)
受影响的事件 (3): PlayerUpdate, EnemyAI, PhysicsSync

检测标准:

  • 平均执行时间 > 10ms
  • 最大执行时间 > 16ms(60 FPS时一帧)

影响: 可能导致帧丢失和卡顿

解决方案: 优化监听器代码,将重工作移到协程

⚡ 高频率警告

过度触发:

⚠️ 警告
高频率事件
事件每秒触发超过60次
受影响的事件 (2): OnMouseMove, OnColliderCheck

检测标准:

  • 每秒触发次数 > 60

影响: CPU开销,潜在的不必要工作

解决方案: 批处理更新,使用节流,考虑替代模式

💾 内存警告

GC分配:

⚠️ 警告
检测到垃圾回收
事件在执行期间导致GC分配
受影响的事件 (5): SpawnParticle, CreateUI, LoadAsset

检测标准:

  • 每次执行的GC分配 > 0

影响: 垃圾回收暂停,帧丢失

解决方案: 使用对象池,避免在热路径中创建新对象

🔄 递归调用检测

潜在的无限循环:

❌ 严重
可能的递归事件
事件可能正在触发自身,创建循环
受影响的事件 (1): OnValueChanged

检测标准:

  • 事件从其自己的监听器内触发
  • 堆栈跟踪显示递归

影响: 堆栈溢出,Unity冻结

解决方案: 添加递归保护,重新设计事件流

警告卡布局

每个警告显示:

标题:

  • 图标(🔥/⚠️/ℹ️)表示严重性
  • 警告类型(例如,"慢执行")
  • 严重性徽章(严重/警告/信息)

正文:

  • 问题的清晰描述
  • 影响说明
  • 受影响的事件计数

事件列表:

  • 显示最多5个受影响的事件
  • 每个都有**[View]**按钮来检查
  • 如果 > 5个事件受影响则显示"...and X more"

严重性级别

级别颜色优先级需要的操作
严重🔴 红色立即发布前修复
警告🟡 黄色重要应该优化
信息🔵 蓝色可选仅供参考

无警告状态

当一切运行良好时:

✅ 一切正常!
未检测到性能问题或警告。
最佳实践

在开发期间定期检查警告选项卡。及早解决警告可防止性能问题积累并变得更难修复。

👂 监听器选项卡

所有活动事件订阅的综合概览。

Listeners Tab - Running State

监听器卡

每个具有活动监听器的事件显示为可展开的卡:

卡标题:

EventName  ⭐ (如果持久化)     Total: 12
  • 事件名称:事件名称(蓝色,粗体)
  • ⭐ 图标:出现在持久化事件上(在场景加载间存活)
  • 总计数:所有监听器类型的总和(绿色)

监听器类型分解

每个卡显示6个块,代表不同的监听器类型:

可视化布局

┌─────────────┬─────────────┬─────────────┬─────────────┬─────────────┬─────────────┐
│ Basic(Insp) │ Basic(API) │Priority(API)│ Cond(API) │Persist(Insp)│Persist(API) │
│ 3 │ 2 │ 4 │ 1 │ 0 │ 2 │
└─────────────┴─────────────┴─────────────┴─────────────┴─────────────┴─────────────┘

块类型

描述来源
Basic (Insp)来自Inspector的基础监听器🔵 蓝色(Inspector)
Basic (API)来自代码的基础监听器⚫ 深色(API)
Priority (API)来自代码的优先级监听器⚫ 深色(API)
Cond (API)来自代码的条件监听器⚫ 深色(API)
Persist (Insp)来自Inspector的持久化🔵 蓝色(Inspector)
Persist (API)来自代码的持久化⚫ 深色(API)

颜色编码

  • 🔵 蓝色块:在Unity Inspector中配置(GameEventManager)
  • ⚫ 深色块:通过代码注册(AddListenerAddPriorityListener等)
  • 淡化/灰色:此类型无监听器(计数 = 0)
  • 白色数字:存在活动监听器

理解数据

示例卡:

PlayerHealthChanged     Total: 8

Basic(Insp): 2 Basic(API): 1 Priority(API): 3 Cond(API): 1 Persist(Insp): 0 Persist(API): 1

解释:

  • 8个总监听器订阅此事件
  • 2个在GameEventManager中配置的基础监听器
  • 1个通过代码添加的基础监听器
  • 3个优先级监听器(基于代码,具有自定义优先级)
  • 1个条件监听器(基于代码,有条件执行)
  • 1个持久化监听器(基于代码,在场景更改间存活)

特殊指示器

持久化事件卡:

  • 名称旁边有**⭐ 星号图标**
  • 工具提示:"持久化事件"
  • Basic (Insp)计数显示为0
  • Persist (Insp)显示Inspector监听器计数

选定事件:

  • 卡具有蓝色高亮背景
  • 指示此事件已选择以进行详细查看

使用场景

调试订阅问题:

  • 验证监听器是否正确注册
  • 检查监听器是否被正确删除
  • 识别被遗忘的订阅导致的内存泄漏

架构分析:

  • 查看Inspector和基于代码的监听器之间的平衡
  • 识别可能需要优化的大量订阅事件
  • 理解整个系统的监听器分布

性能规划:

  • 高监听器计数意味着每个事件的CPU时间更多
  • 考虑将多个监听器合并为一个
  • 评估是否所有监听器都是必需的
内存泄漏检测

如果您看到监听器计数随时间增长(特别是在场景转换期间),您可能有内存泄漏。对象应在OnDisable()OnDestroy()中正确取消订阅。


🔗 自动化选项卡

触发器和链事件流的可视化表示。

视图模式

切换选项:

  • ☑️ 树视图 - 仅显示具有完整层次结构的根事件
  • 平面视图 - 显示所有具有自动化的事件,无层次结构

树视图(推荐)

Automation Tab - Full Tree

显示从根事件(不被其他事件触发的事件)开始的自动化流程:

树结构

▶ RootEvent                                      🎯 源
└─ 🕹️ ChildTrigger1
└─ 🕹️ ChildTrigger2
└─ 🔗 ChainNode1 ⏱ 2s 等待
└─ 🔗 ChainNode2 ⏳ 1s 等待
└─ 🔗 ChainNode3

平面视图

Automation Tab - Flat Tree

将自动化流程显示为时间顺序列表,扁平化层次结构以线性显示链接的事件。

平面结构

▶ RootEvent                                      🎯 源
└─ 🕹️ ChildTrigger1

▶ RootEvent 🎯 源
└─ 🕹️ ChildTrigger2

▶ RootEvent 🎯 源
└─ 🔗 ChainNode1 ⏱ 2s 等待

▶ 🔗 ChainNode1 🎯 源
└─ 🔗 ChainNode2 ⏳ 1s 等待

▶ 🔗 ChainNode2 🎯 源
└─ 🔗 ChainNode3

理解可视化

节点类型

图标类型描述颜色
源事件(不被其他事件触发)🔵 青色
🕹️触发器并行扇出节点🟢 绿色
🔗顺序阻塞节点🟠 橙色

节点信息

每个节点显示:

左侧:

  • 树连接线(└─)
  • 类型图标(▶/🕹️/🔗)
  • 事件名称(按类型着色)
  • 事件GUID(淡化,用于调试)

右侧状态图标:

  • 🎯 源 - 这是根事件
  • 🧩 - 有条件函数
  • ⏱ Xs 等待 - 执行前有延迟
  • ⏳ Xs 等待 - 执行后有持续时间
  • - 等待异步完成

读取流程模式

简单扇出(触发器)

▶ ButtonClicked
└─ 🕹️ PlaySound
└─ 🕹️ ShowFeedback
└─ 🕹️ LogAnalytics

模式:并行执行 行为:按钮点击时所有三个事件同时触发 使用场景:独立的副作用

顺序链

▶ StartCutscene
└─ 🔗 FadeOut ⏱ 0s 等待 ⏳ 1s 等待
└─ 🔗 LoadScene ⏱ 0s 等待 ⏳ 2s 等待
└─ 🔗 FadeIn ⏱ 0.5s 等待

模式:带延迟的顺序 行为

  1. FadeOut执行,等待1秒
  2. LoadScene执行,等待2秒
  3. 延迟0.5秒后,FadeIn执行

使用场景:过场动画、教程、加载序列

复杂混合

▶ EnemyDefeated
└─ 🕹️ StopMusic
└─ 🕹️ PlayVictorySound
└─ 🔗 ShowRewards ⏱ 1s 等待
└─ 🔗 SaveGame
└─ 🕹️ SpawnLoot 🧩

模式:并行和顺序的混合 行为

  • 音乐/音效立即触发(并行)
  • 1秒后显示奖励,然后保存游戏(顺序)
  • 战利品有条件地生成(带条件的并行)

事件流分析

示例真实世界流程:

▶ OnPlayerDeath
└─ 🕹️ StopPlayerInput
└─ 🕹️ DisablePlayerCollider
└─ 🔗 PlayDeathAnimation ⏳ 2s 等待
└─ 🔗 ShowDeathUI ⏱ 0.5s 等待 ⏳ 3s 等待
└─ 🔗 RespawnPlayer 🧩
└─ 🕹️ ResetPlayerState
└─ 🕹️ UpdateCheckpoint

流程分解:

  1. 即时动作(触发器):
    • 停止玩家输入
    • 禁用碰撞
  2. 死亡动画(链):
    • 播放动画
    • 等待2秒让动画完成
  3. 显示UI(链):
    • 等待0.5秒(过渡延迟)
    • 显示死亡屏幕
    • 等待3秒(玩家可以看到屏幕)
  4. 条件复活(带条件的链🧩):
    • 仅当玩家有剩余生命时
    • 在检查点复活玩家
  5. 清理(触发器):
    • 重置玩家统计
    • 保存新检查点

状态图标参考

图标含义详情
🎯 源根事件不被任何其他事件触发
🧩条件有条件检查(可能不执行)
⏱ Xs开始延迟执行前等待X秒
⏳ Xs持续时间等待执行后等待X秒(阻塞链)
异步等待等待协程/异步完成

递归检测

如果事件触发自身(直接或间接),树会在递归节点处停止以防止无限显示:

▶ OnValueChanged
└─ 🔗 UpdateValue
└─ 🔗 OnValueChanged ⚠️ (递归 - 已停止)
递归警告

递归事件流出现在警告选项卡中作为潜在的无限循环。始终在代码中使用保护以防止实际递归。


🔍 详情选项卡

深入了解单个事件信息和执行历史。

Details Tab - Log View

导航

当您执行以下操作时,详情选项卡会自动打开:

  • 从最近事件点击**[Details]**按钮
  • 从统计点击**[View Logs]**按钮
  • 从警告点击**[View]**按钮

在顶部:

  • ← 返回[上一选项卡] - 返回您来自的地方

日志详情视图

查看特定日志条目时:

事件信息卡:

字段描述
事件名称事件的完整名称
事件类型泛型类型(例如,GameEvent<float>
时间精确时间戳(HH:MM:SS.mmm)
执行时的帧号
参数传递的参数值
调用者触发事件的方法

堆栈跟踪部分:

堆栈跟踪:
at TinyGiants.GameEventSystem.Runtime.GameEvent`1.Raise(T argument)
at PlayerController.TakeDamage(Int32 damage) in Assets/Scripts/PlayerController.cs:line 142
at EnemyController.Attack() in Assets/Scripts/EnemyController.cs:line 89
at EnemyController.Update() in Assets/Scripts/EnemyController.cs:line 52
...

使用场景:

  • 追踪事件起源位置
  • 调试意外的事件调用
  • 理解调用链
  • 识别性能瓶颈

事件统计视图

Details Tab - Statistics View

查看特定事件的所有日志时:

标题:

Event: PlayerHealthChanged     Total: 245 triggers

使用统计卡:

指标描述
触发计数总执行次数
频率每秒触发次数
平均间隔触发之间的时间
上次触发自上次执行以来的相对时间

性能指标卡(如果可用):

指标描述颜色
平均时间平均执行持续时间绿色/黄色/红色
最大时间最慢执行白色
最小时间最快执行灰色
GC分配垃圾回收如果 > 0则为红色

最近日志:

以相反的时间顺序显示此事件的最后50次执行:

[14:52:33.145]  F:3201  PlayerHealthChanged  <GameEvent<float>>  [Details]
📍 Called by: DamageSystem.ApplyDamage()

[14:52:31.089] F:3180 PlayerHealthChanged <GameEvent<float>> [Details]
📍 Called by: HealthRegen.Tick()

...

使用场景

调试事件问题:

  1. 进入最近事件选项卡
  2. 找到有问题的事件执行
  3. 点击**[Details]**查看堆栈跟踪
  4. 识别调用代码
  5. 修复问题

性能分析:

  1. 进入统计选项卡
  2. 点击慢事件上的**[View Logs]**
  3. 查看性能指标
  4. 检查执行模式
  5. 基于数据优化

事件流理解:

  1. 触发事件链
  2. 查看每个事件的日志
  3. 验证执行顺序
  4. 检查事件之间的时间
  5. 验证行为

🛠️ 高级功能

调试器控制

调试器切换按钮(在标题中):

  • ● Debugger ON(绿色)- 主动记录所有事件数据
  • ○ Debugger OFF(红色)- 不记录(节省性能)

何时禁用:

  • 在性能关键的游戏玩法测试期间
  • 录制游戏画面时
  • 减少编辑器开销
  • 不需要监控时
性能影响

调试器的开销很小(每个事件约0.1-0.5ms),但在最终性能测试期间禁用它会给您最准确的指标。

清除数据选项

点击🗑 清除按钮以访问选项:

清除菜单:

  • 仅清除日志 - 删除事件执行历史
  • 仅清除统计 - 重置触发计数和频率数据
  • 清除性能数据 - 重置执行时间测量
  • 清除所有数据 - 完全重置(需要确认)