以下是微型调试器中的常见标签列表,按类别分组。了解这些标签可以帮助你在体验中识别问题代码。表包含标签标签、描述和优化性能建议,用于提高性能并优化您的体验。
睡眠
当线程未激活执行任务时,它们进入睡眠状态,带有标签来表示线程睡眠的时间长度。在任何时候,大多数工作线程都极其常见地处于睡眠状态。
AI/导航
标签 | 描述 | 性能建议 |
---|---|---|
渲染瓷砖 | 更新导航地砖需要用于路径查找请求,通常由计算路径跟随,该路径需要这些地砖处于最新状态。在主线程上跟随导航工作/预处理。 | 减少路径探索地砖无效化的数量,因为这会导致这些路径需要重新计算。这是由非导航部件移动造成的。 |
计算路径 | 计算路径,通常在 rasterizeTile 之后。 | 减少 ComputePath 调用的数量和世界范围。如果多个代理从大约相同的位置开始/结束,尝试重复使用路径,如果它们被期望从相同的位置开始/结束。 |
预处理/getPrimitivesOverlapping | 收集每个路径拓扑瓷砖的世界几何图形,并将渲染任务安排给路径拓扑线程执行。 | 减少零件数量。 |
动画
标签 | 描述 | 性能建议 |
---|---|---|
模拟/游戏步骤 | 处理游戏特定对象,例如 Humanoids、Animations 和心跳回调 | |
模拟/游戏步骤/步骤遗产 | Humanoid 状态变化和movement.Called步骤人形在服务器上现在(并行版) | 如果你有NPC,禁用或减少Humanoid状态。梯子状态最重要的是停用。减少回调以状态变更,例如 Humanoid.Died 或 Humanoid.Running |
模拟/游戏步骤/步骤动画 | Animators 将在当前播放动画中向前步行。 | 减少 Animators 或动画节点的数量以降低此步骤的工作量减少回调数量到动画事件,例如 AnimationTrack.KeyframeReached 或 AnimationTrack.Ended |
模拟/游戏步骤/RunService.Stepped | 运行与 RunService.Stepped 事件连接的函数。 | 减少连接到该事件的函数的数量或工作量。考虑推迟或替换昂贵的计算。考虑在多个框架上分布计算。 |
音频
标签 | 描述 | 性能建议 |
---|---|---|
声音 | 处理音频:位置、效果、音量等 | |
开发者标签_声音 | 内存声音:通常是短小到足以进入内存的声音。通常是短暂的一击效果,而不是长形的音乐。 | 使用更少的短音效。 |
开发者标签_流媒体声音 | 流/流媒体声音:这些是从磁盘流传的较大声音。一般来说,更长的音乐文件。 | 使用更少的长音。 |
网络
标签 | 描述 | 性能建议 |
---|---|---|
网络包接收 | 接收网络包。如果许多对象或事件正在复制,这一步需要更长时间。 | 复制较少的对象或事件。 |
复制器/过程包裹 | 处理网络包的内容,例如运动、事件召唤和属性更改。 | 减少复制的对象数量或尺寸,或通过增量步骤来执行此操作。如果地图尺寸增加,可能会增加,因为更大的地图往往有更多的整体1) 活动 2)动态(as in friend activity)。 |
分配带宽并运行发送者/派送物理发送者和触发器 | 发送体验中的活动数据。 | 减少移动对象和/或触摸的数量。请参阅以下部分。 |
分配带宽并运行发送者/派送流程工作 | 将相应的特定区域发送到“流媒体”精选能中的特定客户端。 | 减少最小和目标传输半径。 |
分配带宽并运行发送者/派送数据发送者 | 发送属性更改、远程事件、人形状态变化、动画开始/停止。 | 减少数据模型中复制的更改数量 |
复制器发送集群 | 向客户端发送地形数据。 | 减少地形更改的数量或尺寸。 |
模型完整度超级工作 | 仅服务器端:完整性是内部概念。当模型完全发送时,模型完全性事件发送。 | 添加或移除更少的实例。 |
反渗透包 | 低级网络包处理。准备复制器进程包。 | 发送更少的更新。 |
渲染
标签 | 描述 | 性能说明 |
---|---|---|
准备 | 信息来自主线程,并更新用于渲染的各种数据结构。这会阻止模拟线程,因此应尽可能小。 | 请参阅下面的准备标签。 |
准备/通过3d饰品 | 渲染各种对象饰品,例如对象上方的文本标签。此步骤可能包括射线投射以确定是否可以看到这些对象。 | 减少可见的装饰物数量,例如 BillboardGuis、Humanoid 名称/健康标签等 |
准备/通过 2d | 准备 2D UI 渲染(既是玩家也是 Roblox UI)。 | 减少 UI 元素的数量或复杂度。 |
准备/更新准备/更新无效零件 | 更新那些拥有已更改或添加的属性的零件。 | 减少世界上的属性更改数量。如果脚本更新了大量对象属性,分解到框架上。 |
准备/更新准备/更新无效的快速集群 | 准备几何图形,通常用“快速集群”来渲染Humanoids。子标记指定零件数、边和边的尺寸。 | 减少在不是 Humanoids 的对象下使用“人形”的使用。不应该使用它来缩短绘制调用,因为快速集群消耗的内存要多得多。 |
准备/更新准备/更新动态零件 | 更新位置为 Humanoids , 车辆和其他移动实例用于渲染。 | 减少移动Humanoids或可见的车辆数量或复杂度。将相同材料和颜色的零件结合成联盟或网格零件可以帮助解决这个问题。 |
准备/更新准备/更新实例集群 | 准备使用实例渲染的静态几何图形(零件和网格零件)。标签 “集群” 和 “实例” 表示更新的数量。 | 使用较少的整体网格和材料变化。你也可以使用具有相似外观的对象来创建集群 - 尺寸、颜色、材料。 |
执行 | 当实际渲染命令被创建并发布时。 | 请参阅下面的执行标签。 |
执行/填充GUI边界 | 用户界面渲染。用户界面边界填充缓冲区,用于装饰。“用户界面数量”标签显示渲染器列表中的元素数量。 | 如果成本高,请通过确保隐藏正确来禁用 UI,从而减少正在更新的 UI 数量。 |
执行/场景/查询FrustumOrdered | 应用碎片收集,使不可见的对象不被渲染。 | 如果存在高成本,那么意味着有很多元素。也许使用一些较大的网格,其中单个网格包含更多细节,而不是许多小零件。 |
执行/场景/计算光源执行 | 计算靠近镜头的照明。 | 操纵灯光源数量或移动相机更少以减少重新计算灯光所需的时间。 |
执行/场景/计算光源执行/光网CPU | 更新声量照明,用于 Voxel 和 ShadowMap 模式以及质量等级低于 4 的 Future 模式。 | 如果更新块占用时间过长,请考虑使用更低分辨率的几何图形、减少零件数量或锚定零件。如果其他子标记需要太长时间,请考虑减少灯光数量并使用不阴影投射几何图形来移动并无效化占用的对象。 |
执行/场景/计算光照执行/阴影地图系统 | 更新阴影地图。在质量等级低于 4 或当 Lighting.Technology 设置为 Voxel 时未执行。 | 如果照明设置为 Future ,将其降低到 ShadowMap 或减少灯光数量。您还可以使用 Light.Shadows 和 BasePart.CastShadows 来禁用对较不重要实例的阴影投射。请参阅提高性能。 |
执行/场景/发光、颜色修正、MSAA、SSAO和SSAO应用 | 后期处理渲染。 | 减少后期处理效果的数量。通常这不是很重要的。 |
执行/场景/用户界面 | 用户界面渲染。在 Id_Screen 中,有一个标签,包含使用的批量、材料和三角形数量。 | 减少可见的 UI 元素数量。使用 CanvasGroups 可能会以牺牲更多内存的代价帮助。 |
执行/场景/更新视图/更新粒子,更新粒子边界 | 更新粒子位置和边界。 | 减少 ParticleEmitters 数量、发射率、寿命等。限制发射器的移动。 |
Id_Opaque | 场景中的部件透明值为 0 的部件。 | |
Id_透明 | 场景中的零件透明度值小于 0 的部分。 | 减少使用部分透明度(值大于 0 和 1)。 |
Id_Decal | 场景中的图标。 | |
执行/呈现 | 等待 GPU 完成渲染前一帧;实际上向 GPU 发出渲染命令;处理低级图形资源。 | 减少场景复杂性。如果这一步需要花很长时间,您可能会受到 GPU 限制。 |
执行/呈现/等待完成 | 等待 GPU 完成渲染前一帧。 | 如果这一般发生很多次,那么渲染的物品数量太高了。FRM可以帮助平衡这一点,但如果它仍然很高,请尝试使用更少的细节。 |
脚本
标签 | 描述 | 性能建议 |
---|---|---|
渲染/预渲染/火焰绑定到渲染步骤回调 | 运行函数,绑定到渲染步骤通过 RunService:BindToRenderStep() 。 | 确保使用 RunService:BindToRenderStep() 的脚本功能尽可能少地工作。 |
渲染/预渲染/运行服务.RenderStepped | 运行与 RunService.RenderStepped 事件连接的函数。 | 与 BindToRenderStep 类似,确保使用此事件的函数尽可能少地工作。 |
等待混合脚本工作 | 继续使用等待框架等待的脚本。 | 这一步有一个执行时预算来运行等待脚本,如果您有太多等待脚本或在交付前拥有长时间运行的脚本,这一步可能需要多个 |
LuaGC | Luau垃圾收集周期。标签提供对总分配和被释放的量的内存估计。 | 泳池 lua 表和其他可收集对象,或尝试减少创建临时表或字符串 |
心跳/运行服务.心跳 | 运行连接到 RunService.Heartbeat event.Talk 的功能到模拟和脚本接触。当前描述已经足够通用,不会出错 | 减少连接到 RunService.Heartbeat 的函数的数量或工作量。 |
模拟
标签 | 描述 | 性能建议 |
---|---|---|
分布式物理所有权 | 决定服务器或客户端是否拥有某些实例,例如零件的权限。 | 分布式物理所有权。 |
模拟/装配 | 更新由物理引擎使用的连接对象(装配)的树状结构。 | 减少创建或破坏的关节数量。 |
模拟/物理步数总/物理步数 | 运行物理模拟。 | 减少物理模拟的身体数量和复杂度。 |
模拟/物理步数总/物理步数/空间过滤器/过滤步 | 更新模拟岛,根据网络所有权安排零件,本地模拟。岛屿是不相互影响的零件群组,可以独立地模拟。 | 避免频繁设置网络所有权。保持零件组之间的距离足够远,以便它们可以单独模拟。 |
模拟/物理步数总/物理步数/世界步/步联系 | 更新对象之间的联系。 | 减少一次碰撞的身体数量,或使用更简单的碰撞箱。立方体比复杂的网格更好。 |
模拟/物理步数总/物理步数步/世界步/步世界 或 步世界减速 | 解决与连接器、浮力和 Humanoids 相关的物理方程。当引擎过载且无法实时模拟所有内容时,可能需要限制一些步骤(步骤世界限制),只有Humanoids等“实时装配”被模拟。 | 取决于时间到哪里基于以下三个阶段:步骤联系人:狭窄阶段碰撞检测几何测试。解决步骤:整合时间并解决碰撞和其他约束更新广域阶段:在碰撞检测系统中更新组件的位置,并找到可能碰撞的窄阶对。 |
通知移动装配体 | 帮助跟踪原始类型多久没有睡眠。 | |
模拟/物理步骤总数/物理步骤/间歇网络装配 | 间接装配由此网络 peer 不控制的组件。 | 将零件的网络所有者设置为这个 peer,以减少这种情况;尽管这通常会导致更多的物理工作在其他地方进行。 |
模拟/处理坠落部件 | 移除掉低于工作区/坠落部件高度的部件。 | 降低摧毁高度或减少到摧毁高度掉落的零件数量。 |
心跳/心跳内部/工作区在心跳上/更新视觉睡眠 | 移动通知组件的第二部分。 | |
心跳/运行服务.心跳 | 运行连接到 RunService.Heartbeat event.Talk 的功能到模拟和脚本接触。当前描述已经足够通用,不会出错 | 减少连接到 RunService.Heartbeat 的函数的数量或工作量。 |
世界步/步骤联系人 | 帮助物理模拟步骤多次联系一次。 | 减少碰撞对象的数量。 |
解决批量 | 帮助物理模拟解决物体的批量运动。 | |
机制间插值 | 帮助 InterpolateNetworkAssemblies。 |
UI
标签 | 描述 | 性能建议 |
---|---|---|
渲染/预渲染/更新输入 | 如果用户自上一帧以来进行了输入,将更新并发射所有与用户输入相关的事件。 | 这是当与用户输入相关的事件发生时。尝试不要直接在获取输入时做太多工作很重要。考虑为输入进行最小限度的处理,大型计算应推迟到另一个稍后发生的线程。 |
渲染/预渲染/渐变服务 | 使用 TweenService 更新被拆分的对象,并调用完成回调,例如用于提供给 TweenSize 或 TweenPosition 的回调。 | 减少使用 TweenService 拆分的对象数量,并确保回调尽可能少地工作。 |
渲染/预渲染/更新用户界面布局 | 更新 UI 元素的位置和尺寸。 | 减少动态调整大小或位置的 UI 元素数量,例如由 UILayout 管理的元素。 |
心跳/青少年服务 | 在服务器上,更新对象由 TweenService 梳理。在客户端上,这在预渲染步骤中进行。 | 减少由 TweenService 淡化的对象数量。 |