运行时监控
游戏事件监控器是一个强大的实时调试和分析工具,提供对运行时事件系统行为的全面洞察。它帮助您识别性能瓶颈、跟踪事件流、监控监听器关系并调试复杂的事件链。
🎯 为什么使用运行时监控器?
强大的功能
运行时监控器改变了您开发和调试事件驱动游戏的方式:
- 🔍 实时可见性 - 准确地看到事件何时以及如何在发生时被触发
- ⚡ 性能分析 - 识别慢速监听器并优化执行时间
- 📊 统计分析 - 跟踪事件频率、模式和使用趋势
- 🔗 流程可视化 - 一目了然地理解复杂的触发器和链关系
- ⚠️ 自动警告 - 及早发现性能问题和潜在问题
- 👂 监听器检查器 - 监控所有活动订阅及其来源
- 📝 事件日志 - 完整的执行历史记录,带有用于调试的堆栈跟踪
这对您的开发意味着什么
- 更快的调试:立即查看哪些事件触发以及按什么顺序
- 性能优化:在影响游戏玩法之前识别并修复慢速监听器
- 架构理解:可视化事件流以维护清晰的系统设计
- 主动问题检测:自动捕获内存泄漏和递归调用等问题
- 团队协作:与团队成员共享事件流的可视化表示
🚀 打开监控器
该实用工具位于**游戏事件系统**中,您可以通过以下方法访问:
从系统仪表板:
游戏事件系统窗口 → 点击"Game Event Monitor"

监控器窗口可以与其他Unity编辑器窗口一起停靠,以便在播放模式期间方便访问。我建议将其停靠在控制台或Inspector窗口附近。
📱 界面概览
初始窗口状态
当您第一次打开游戏事件监控器时,您将看到窗口处于停止状态(不在播放模式):

停止状态下的关键元素:
- 标题栏 - 显示游戏事件系统徽标和窗口标题
- 状态指示器 - 显示灰色的"○ Stopped"(不在播放模式)
- 调试器切换 - 启用/禁用事件跟踪的按钮
- 选项卡导航 - 8个主要选项卡(在播放模式之前呈灰色)
- 播放模式提示 - 引导您进入播放模式的中央消息
运行时监控器仅在播放模式期间收集和显示数据。在编辑模式下禁用所有监控功能以避免性能开销。
窗口组件
监控器界面由几个关键区域组成:
1. 标题栏
位于窗口顶部,标题包含:
-
🎮 徽标与标题 - 视觉品牌和窗口标识
-
状态徽章 - 显示当前状态:
- Running(绿色)- 播放模式处于活动状态,监控事件
- Stopped(灰色)- 编辑模式,无监控
-
调试器切换 - 控制是否正在跟踪事件:
- Debugger ON(绿色)- 主动记录事件
- Debugger OFF(红色)- 不记录(节省性能)
2. 导航工具栏
在标题下方,您会找到主导航选项卡:
| 选项卡 | 图标 | 目的 |
|---|---|---|
| Dashboard | 📊 | 所有监控数据的概览 |
| Performance | ⚡ | 执行时间分析和分析 |
| Recent | 📝 | 按时间顺序排列的事件日志 |
| Statistics | 📈 | 事件频率和使用模式 |
| Warnings | ⚠ | 性能问题和问题 |
| Listeners | 👂 | 活动订阅概览 |
| Automation | 🔗 | 触发器和链流程可视化 |
| Details | 🔍 | 深入了解选定的事件 |
3. 搜索与控制
在工具栏右侧:
- 搜索字段 - 跨所有选项卡过滤事件
- 清除菜单 - 清除不同数据类型的选项
📊 仪表板选项卡
仪表板提供整个事件系统健康状况和活动的高级概览。

指标卡
在顶部,四个指标卡显示关键统计信息:
📊 总事件数
- 显示内容:游戏中唯一事件的数量
- 包括:所有活动数据库中的所有事件
- 使用场景:了解事件系统的规模
📝 总日志数
- 显示内容:记录的事件执行数量
- 更新:事件触发时实时更新
- 使用场景:跟踪整体系统活动
⚡ 已监控
- 显示内容:具有性能数据的事件数量
- 标准:仅触发的事件
- 使用场景:查看哪些事件有分析信息
⚠ 警告
- 显示内容:活动性能警告的计数
- 颜色:如果存在任何警告则为红色
- 使用场景:快速问题检测
活动数据库部分
显示所有当前加载的游戏事件数据库:
📁 活动数据库 (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 →"查看完整列表
⚡ 性能选项卡
每个已触发事件的详细性能分析。

排序控制
在选项卡顶部,您可以对性能数据进行排序:
排序选项:
- 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:创建垃圾,重构以避免分配
- 高监听器计数:考虑合并监听器
快速操作
- 👂 按钮:跳转到此特定事件的监听器选项卡
- 点击行:选择事件以在详情选项卡中查看
- 搜索:实时按名称过滤事件
📝 最近事件选项卡
所有事件执行的完整时间顺序日志。

控制选项
在选项卡顶部:
切换选项:
- ☑️ 自动滚动 - 自动滚动到最新事件
- ☐ 显示堆栈跟踪 - 显示每个事件的调用堆栈
状态指示器:
- "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")
- 部分匹配有效
- 启用自动滚动以查看事件发生时的情况
- 当您发现问题时,禁用自动滚动
- 启用显示堆栈跟踪以查看调用层次结构
- 点击Details查看完整的事件信息
- 使用此数据追踪并修复问题
📈 统计选项卡
分析事件使用模式和随时间变化的频率。

排序控制
按不同指标对统计信息进行排序:
排序选项:
- 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()中
- 可以批处理的不必要的事件流量
使用场景
识别未使用的事件:
- 按计数升序排序
- 计数低的事件可能是死代码
查找性能热点:
- 按频率降序排序
- 高频率事件应该高度优化
调试事件时间:
- 检查平均间隔以理解事件模式
- 不规则间隔可能表明错误
跟踪最近活动:
- 按上次触发降序排序
- 查看哪些事件当前处于活动状态
⚠️ 警告选项卡
自动检测性能问题和潜在问题。

警告类别
系统自动检测几种类型的问题:
🔥 性能问题
慢执行:
❌ 严重
慢事件执行
事件执行时间过长(平均 > 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"
严重性级别
| 级别 | 颜色 | 优先级 | 需要的操作 |
|---|---|---|---|
| 严重 | 🔴 红色 | 立即 | 发布前修复 |
| 警告 | 🟡 黄色 | 重要 | 应该优化 |
| 信息 | 🔵 蓝色 | 可选 | 仅供参考 |
无警告状态
当一切运行良好时:
✅ 一切正常!
未检测到性能问题或警告。
在开发期间定期检查警告选项卡。及早解决警告可防止性能问题积累并变得更难修复。
👂 监听器选项卡
所有活动事件订阅的综合概览。

监听器卡
每个具有活动监听器的事件显示为可展开的卡:
卡标题:
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)
- ⚫ 深色块:通过代码注册(
AddListener、AddPriorityListener等) - 淡化/灰色:此类型无监听器(计数 = 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)计数显示为0Persist (Insp)显示Inspector监听器计数
选定事件:
- 卡具有蓝色高亮背景
- 指示此事件已选择以进行详细查看
使用场景
调试订阅问题:
- 验证监听器是否正确注册
- 检查监听器是否被正确删除
- 识别被遗忘的订阅导致的内存泄漏
架构分析:
- 查看Inspector和基于代码的监听器之间的平衡
- 识别可能需要优化的大量订阅事件
- 理解整个系统的监听器分布
性能规划:
- 高监听器计数意味着每个事件的CPU时间更多
- 考虑将多个监听器合并为一个
- 评估是否所有监听器都是必需的
如果您看到监听器计数随时间增长(特别是在场景转换期间),您可能有内存泄漏。对象应在OnDisable()或OnDestroy()中正确取消订阅。
🔗 自动化选项卡
触发器和链事件流的可视化表示。
视图模式
切换选项:
- ☑️ 树视图 - 仅显示具有完整层次结构的根事件
- ☐ 平面视图 - 显示所有具有自动化的事件,无层次结构
树视图(推荐)

显示从根事件(不被其他事件触发的事件)开始的自动化流程:
树结构
▶ RootEvent 🎯 源
└─ 🕹️ ChildTrigger1
└─ 🕹️ ChildTrigger2
└─ 🔗 ChainNode1 ⏱ 2s 等待
└─ 🔗 ChainNode2 ⏳ 1s 等待
└─ 🔗 ChainNode3
平面视图

将自动化流程显示为时间顺序列表,扁平化层次结构以线性显示链接的事件。
平面结构
▶ 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 等待
模式:带延迟的顺序 行为:
- FadeOut执行,等待1秒
- LoadScene执行,等待2秒
- 延迟0.5秒后,FadeIn执行
使用场景:过场动画、教程、加载序列
复杂混合
▶ EnemyDefeated
└─ 🕹️ StopMusic
└─ 🕹️ PlayVictorySound
└─ 🔗 ShowRewards ⏱ 1s 等待
└─ 🔗 SaveGame
└─ 🕹️ SpawnLoot 🧩
模式:并行和顺序的混合 行为:
- 音乐/音效立即触发(并行)
- 1秒后显示奖励,然后保存游戏(顺序)
- 战利品有条件地生成(带条件的并行)
事件流分析
示例真实世界流程:
▶ OnPlayerDeath
└─ 🕹️ StopPlayerInput
└─ 🕹️ DisablePlayerCollider
└─ 🔗 PlayDeathAnimation ⏳ 2s 等待
└─ 🔗 ShowDeathUI ⏱ 0.5s 等待 ⏳ 3s 等待
└─ 🔗 RespawnPlayer 🧩
└─ 🕹️ ResetPlayerState
└─ 🕹️ UpdateCheckpoint
流程分解:
- 即时动作(触发器):
- 停止玩家输入
- 禁用碰撞
- 死亡动画(链):
- 播放动画
- 等待2秒让动画完成
- 显示UI(链):
- 等待0.5秒(过渡延迟)
- 显示死亡屏幕
- 等待3秒(玩家可以看到屏幕)
- 条件复活(带条件的链🧩):
- 仅当玩家有剩余生命时
- 在检查点复活玩家
- 清理(触发器):
- 重置玩家统计
- 保存新检查点
状态图标参考
| 图标 | 含义 | 详情 |
|---|---|---|
| 🎯 源 | 根事件 | 不被任何其他事件触发 |
| 🧩 | 条件 | 有条件检查(可能不执行) |
| ⏱ Xs | 开始延迟 | 执行前等待X秒 |
| ⏳ Xs | 持续时间等待 | 执行后等待X秒(阻塞链) |
| ⏩ | 异步等待 | 等待协程/异步完成 |
递归检测
如果事件触发自身(直接或间接),树会在递归节点处停止以防止无限显示:
▶ OnValueChanged
└─ 🔗 UpdateValue
└─ 🔗 OnValueChanged ⚠️ (递归 - 已停止)
递归事件流出现在警告选项卡中作为潜在的无限循环。始终在代码中使用保护以防止实际递归。
🔍 详情选项卡
深入了解单个事件信息和执行历史。

导航
当您执行以下操作时,详情选项卡会自动打开:
- 从最近事件点击**[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
...
使用场景:
- 追踪事件起源位置
- 调试意外的事件调用
- 理解调用链
- 识别性能瓶颈
事件统计视图

查看特定事件的所有日志时:
标题:
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()
...
使用场景
调试事件问题:
- 进入最近事件选项卡
- 找到有问题的事件执行
- 点击**[Details]**查看堆栈跟踪
- 识别调用代码
- 修复问题
性能分析:
- 进入统计选项卡
- 点击慢事件上的**[View Logs]**
- 查看性能指标
- 检查执行模式
- 基于数据优化
事件流理解:
- 触发事件链
- 查看每个事件的日志
- 验证执行顺序
- 检查事件之间的时间
- 验证行为
🛠️ 高级功能
调试器控制
调试器切换按钮(在标题中):
- ● Debugger ON(绿色)- 主动记录所有事件数据
- ○ Debugger OFF(红色)- 不记录(节省性能)
何时禁用:
- 在性能关键的游戏玩法测试期间
- 录制游戏画面时
- 减少编辑器开销
- 不需要监控时
调试器的开销很小(每个事件约0.1-0.5ms),但在最终性能测试期间禁用它会给您最准确的指标。
清除数据选项
点击🗑 清除按钮以访问选项:
清除菜单:
- 仅清除日志 - 删除事件执行历史
- 仅清除统计 - 重置触发计数和频率数据
- 清除性能数据 - 重置执行时间测量
- 清除所有数据 - 完全重置(需要确认)