3.3 Detail 面板定制与属性矩阵

Detail 定制的入口

给某个类定制「选中时 Details 面板长什么样」:

// 模块启动注册
FPropertyEditorModule& PIM = FModuleManager::LoadModuleChecked<FPropertyEditorModule>("PropertyEditor");
PIM.RegisterCustomClassLayout(
    AMyActor::StaticClass(),
    FOnGetDetailCustomizationInstance::CreateStatic(&FMyActorDetails::MakeInstance));

自定义类 FMyActorDetails : public IDetailCustomization:

void FMyActorDetails::CustomizeDetails(IDetailLayoutBuilder& DetailBuilder)
{
    // 隐藏默认的一组属性
    DetailBuilder.HideCategory("Transform");
    // 拿到特定属性
    IDetailCategoryBuilder& Cat = DetailBuilder.EditCategory("MyCategory");
    // 添加自定义行:按钮、自定义控件
    Cat.AddCustomRow(FText::FromString("操作"))
    [
        SNew(SButton).Text(FText::FromString("自动对齐"))
        .OnClicked_Lambda([](){ /* ... */ return FReply::Handled(); })
    ];
}

定制的典型用法

  1. 隐藏不希望用户改的属性(HideCategory / HideProperty)
  2. 加操作按钮(编辑资产时提供「重新导入」「自动修复」)
  3. 条件显示(某枚举值下才显示的属性组)
  4. 重排分组(把高频属性置顶)

属性矩阵:官方的批量编辑

Property Matrix(属性矩阵)是 UE 内置的「表格化批量编辑」:「属性矩阵」(https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/property-matrix-in-unreal-engi-981d)。选中多个同类资产 → 右键 → 资产操作/批量编辑,多对象的共有属性以表格呈现,改一列=改所有行。

这是最被低估的官方功能——很多团队手写的「批量修改」工具,其实 Property Matrix 就能干。适用:

  • 同类资产的同一属性批量改
  • 可视化对比多个资产的值
  • 批量重设缩放/ LOD 设置

边界:不支持有复杂校验逻辑的修改(自定义验证还是得工具)。

定制 Detail 的常见坑

  1. CustomizeDetails 里慢操作:这个函数在每次选中对象变化时调用,别在里面加载资产、查注册表
  2. 属性句柄生命周期:拿到 FPropertyHandle 后别长期持有(对象可能变)
  3. 多人面板:详情面板可能同时存在多个实例(多选/多窗口),UI 状态别放成员变量上以为是单例
  4. 编辑器 vs 运行时:Detail 定制是 EditorOnly 代码,别碰运行时模块

组合:Detail + 工具按钮

很多好用的工具藏在 Detail 面板里:

  • 数据资产编辑器里加「数据校验」按钮(一键跑检查器)
  • 角色 Actor 加「同步配置」按钮(和配置表对齐)
  • 材质实例加「找回引用」

这类「贴在资产旁边」的小工具,使用频率远高于独立窗口工具——因为出现在用户正在工作的上下文里。

心得:工具位置决定使用率。我的经验排序:Detail 面板按钮 > 右键菜单 > 工具栏命令 > 独立窗口。能用 Detail 定制解决的,绝不另开窗口——策划不会「记得去开你的工具」,但会天天看 Details 面板。