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(); })
];
}
定制的典型用法
- 隐藏不希望用户改的属性(HideCategory / HideProperty)
- 加操作按钮(编辑资产时提供「重新导入」「自动修复」)
- 条件显示(某枚举值下才显示的属性组)
- 重排分组(把高频属性置顶)
属性矩阵:官方的批量编辑
Property Matrix(属性矩阵)是 UE 内置的「表格化批量编辑」:「属性矩阵」(https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/property-matrix-in-unreal-engi-981d)。选中多个同类资产 → 右键 → 资产操作/批量编辑,多对象的共有属性以表格呈现,改一列=改所有行。
这是最被低估的官方功能——很多团队手写的「批量修改」工具,其实 Property Matrix 就能干。适用:
- 同类资产的同一属性批量改
- 可视化对比多个资产的值
- 批量重设缩放/ LOD 设置
边界:不支持有复杂校验逻辑的修改(自定义验证还是得工具)。
定制 Detail 的常见坑
- CustomizeDetails 里慢操作:这个函数在每次选中对象变化时调用,别在里面加载资产、查注册表
- 属性句柄生命周期:拿到 FPropertyHandle 后别长期持有(对象可能变)
- 多人面板:详情面板可能同时存在多个实例(多选/多窗口),UI 状态别放成员变量上以为是单例
- 编辑器 vs 运行时:Detail 定制是 EditorOnly 代码,别碰运行时模块
组合:Detail + 工具按钮
很多好用的工具藏在 Detail 面板里:
- 数据资产编辑器里加「数据校验」按钮(一键跑检查器)
- 角色 Actor 加「同步配置」按钮(和配置表对齐)
- 材质实例加「找回引用」
这类「贴在资产旁边」的小工具,使用频率远高于独立窗口工具——因为出现在用户正在工作的上下文里。
心得:工具位置决定使用率。我的经验排序:Detail 面板按钮 > 右键菜单 > 工具栏命令 > 独立窗口。能用 Detail 定制解决的,绝不另开窗口——策划不会「记得去开你的工具」,但会天天看 Details 面板。
