UE5.8 Mass Framework 专题系列

UE5.8 Mass 专题(十一):调试、Insights、性能与生产落地

整理 Mass Debugger、Gameplay Debugger、MassGameplayDebug、MassInsights、查询统计、Chunk 规模、结构变更、Processor 耗时和上线检查清单。

总览

Mass 调试和普通 Actor 调试很不一样。Actor 问题通常能选中一个对象看组件;Mass 问题经常是“某批实体没有匹配 Query”“某个 Archetype 缺了 Fragment”“某个 Processor 顺序不对”“某个 LOD Chunk 被过滤”“一次结构变更触发了大量迁移”。因此 Mass 项目必须早早建立调试和性能观察流程。

UE5.8 源码里有 MassDeveloperMassEntityDebuggerMassGameplayDebugMassAIDebugMassInsights 相关模块。它们的存在本身就说明 Mass 不是靠日志硬猜的系统。

UE5.8 Mass 专题(十一):调试、Insights、性能与生产落地 配图
Mass 的问题通常不是“一个对象坏了”,而是查询没命中、结构变更太频繁、阶段顺序不对或表现预算失控。

源码依据

Engine/Source/Runtime/Mass/MassDeveloper 提供开发辅助模块,Engine/Source/Editor/MassEntityDebugger 提供编辑器调试入口,MassGameplayDebugMassAIDebug 面向 Gameplay Debugger,Engine/Plugins/MassInsights 提供 Mass Insights 分析 UI。核心运行时里 Query、Processor、Phase、Observer、CommandBuffer 都有可以纳入调试的信息:匹配实体数、Chunk 数、执行耗时、结构变更数量和调度顺序。

架构分析

Mass 性能通常由五类成本构成:

成本 典型表现 排查入口
Query 成本 Processor 每帧扫太多实体 匹配实体数、Chunk Filter
结构变更 帧尖峰、Observer 连锁触发 CommandBuffer flush、Tag 切换数量
表现成本 Actor/ISM 切换抖动、渲染过载 Representation LOD 分布
行为成本 StateTree/SmartObject 查询过密 AI Processor 耗时、Signal 数量
同步成本 带宽尖峰、客户端实体跳变 Bubble 大小、UpdateInterval

先看数量,再看耗时。很多问题不是某段代码慢,而是它处理了不该处理的实体。

使用案例

给项目加一个最小调试 Processor,统计不同状态数量:

void UCrowdDebugStatsProcessor::Execute(FMassEntityManager& EntityManager, FMassExecutionContext& Context)
{
    int32 Moving = 0;
    int32 Queueing = 0;

    EntityQuery.ForEachEntityChunk(EntityManager, Context, [&](FMassExecutionContext& Context)
    {
        const auto Intents = Context.GetFragmentView<FShopperIntentFragment>();
        for (const FShopperIntentFragment& Intent : Intents)
        {
            Moving += Intent.Intent == 0;
            Queueing += Intent.Intent == 1;
        }
    });

    UE_LOG(LogTemp, Verbose, TEXT("Crowd Moving=%d Queueing=%d"), Moving, Queueing);
}

生产版不要每帧输出日志,而是写到调试 HUD、CSV Profiler 或 Insights 事件里。目标是让策划能回答“现在有多少人在排队、多少人被 Off LOD、多少人没有目标”。

项目落地

上线前做四组压力测试:静态生成峰值、镜头快速移动、实体大量进入/退出状态、多人客户端同时接近人群。每组记录实体总数、Archetype 数、Chunk 数、Processor Top 耗时、CommandBuffer flush 耗时、Actor 数、ISM 实例数、Bubble 实体数。没有这些数字,Mass 项目很容易在内容量翻倍后才发现预算失控。

常见坑

不要只看平均帧率,Mass 问题常见为偶发尖峰。不要在调试 Processor 中引入新的高成本 Query。不要让内容侧无限新增 Config 组合而不统计 Archetype 数。不要忽视 Cook 和客户端表现,编辑器里 Debug 正常不代表打包后所有 Trait、DataTable、StateTree、SmartObject 都被正确引用。

源码路径索引

  • Engine/Source/Runtime/Mass/MassDeveloper
  • Engine/Source/Editor/MassEntityDebugger
  • Engine/Plugins/Runtime/MassGameplay/Source/MassGameplayDebug
  • Engine/Plugins/MassInsights