此示例演示了如何使用 MicroProfiler 找到体验中的问题并确定根本原因。下载体验, 从文件 在 Studio 中打开,并跟随。
识别问题
在 Studio 中打开体验后,使用 F5 或 播放 按钮来测试它。
画面帧率感觉很棒,但不像应该在这样的体验和范围的体验。导航到视图选项卡,单击概览选项卡下的概览。
注意,帧率小于 60 每秒钟(FPS)。
按下 CtrlAltF6 ( ⌘1> ⌥1> 3> F63> ) 来打开微型分析器。
注意,框架时间是 一致的 — 条是大约相同的高度 — 所以无论是什么导致低框率的问题,都会在每个框架上运行,而不是在特定时间段内运行并导致框架时间 spikes。
按下 Ctrl P (⌘ P) 暂停微型分析器。使用键盘快捷方式暂停会打开 2> 详细模式2> 。
单击并拖动以平移图形。 注意一个特定的任务在工作线程中使用大量的处理时间比主线程。 将鼠标悬停在 RunService.Stepped 上,并注意它的渲染时间。
在时间线上摆放的条纹表示代验证码层次,因此请保持将鼠标悬停在最下方和最上方的层上,以便检查问题。
注意 LocalScript 标签,该标签表示脚本的名称,并且表示 Raycast 标签,该标签表示问题可能与射线投射有关。
创建问题标签
现在 MicroProfiler 已提供一个起始点,您可以解决问题的代验证码。
停止播放测试并过滤 Explorer 窗口以便找到文件。
搜索raycast指示这部分代码可能是导致体验低性能的原因:
local RAYS_PER_SECOND = 1500local function onStepped()for _ = 1, RAYS_PER_SECOND dolocal startPosition = getRandomPosition()local endPosition = getRandomPosition()local direction = endPosition - startPositionWorkspace:Raycast(startPosition,endPosition)endendRunService.Stepped:Connect(onStepped)更具体地,您可以看到代码正在随机方向进行 1,500 射线投射。
要验证这部分代码是否会导致渲染延迟,请将 debug.profilebegin() 和 debug.profileend() 包围函数的内容:
local function onStepped()debug.profilebegin("Raycast Spam")for _ = 1, RAYS_PER_SECOND dolocal startPosition = getRandomPosition()local endPosition = getRandomPosition()local direction = endPosition - startPositionWorkspace:Raycast(startPosition,endPosition)enddebug.profileend()end
确认和修复问题
开始测试体验,然后再次打开 MicroProfiler。
注意微调器现在显示自定义标签,表明这个功能确实是根本原因。
停止游戏测试。
删除或评论 onStepped() 函数和 RunService.Stepped:Connect(onStepped) 连接。
重新启动体验测试,并检查调试统计。
注意微波纹理图表中的大幅提升以及相应的掉落时间。