1.2 编辑器扩展的五种方式与选型表
选型总表
| 方式 | 开发成本 | 能力上限 | 典型场景 |
|---|---|---|---|
| ① EditorUtilityWidget / 蓝图脚本 | 低(蓝图即可) | 中 | 批量操作、数据检查、简单 UI |
| ② 编辑器命令/菜单按钮(C++) | 中 | 高 | 集成进现有菜单/工具栏的入口 |
| ③ 关卡编辑器模式(EdMode) | 高 | 很高 | 场景编辑工具(画笔、笔刷、样条编辑器) |
| ④ Detail 面板定制 / 属性矩阵 | 中 | 中 | 给特定资产类型加自定义编辑 UI |
| ⑤ 完整插件(Slate UI + 模块) | 高 | 很高 | 独立工具窗口、跨项目复用的工具集 |
优先用低成本的。多数批量需求 ①(EditorUtilityWidget + Editor Scripting)就够了 —— 蓝图里调 Editor Scripting / Editor Utility Library 的节点,一小时能出活。需要场景交互(点击、拖拽、框选)才是 ③ 的地盘。需要复杂窗口和多步流程才上 ⑤。
① EditorUtilityWidget:最快的官方答案
EUW 本质上是「UMG 控件蓝图 + 编辑器运行环境」,自带 OnIntialized(UE5叫 On Initialized),可以拖按钮、开 Web 风格的界面。详见「编辑器工具控件」(https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/editor-utility-widgets-in-unre-8b61)与「使用蓝图编写编辑器脚本」(https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/scripting-the-unreal-editor-us-e9f2)。蓝图里能直接调:
- Editor Scripting / Asset:加载、保存、批量选择
- Editor Utility Library:选中资产、当前关卡、蓝图_override
- Asset Registry(https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/asset-registry-in-unreal-engin-62bd):按类型/路径/标签查询资产
边界:蓝图没有 for 循环里 break/复杂状态机、没有泛型、性能敏感操作也受限——这些场景上 Python(https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/scripting-the-unreal-editor-us-327f)或 C++。
② 命令与菜单按钮
C++ 里注册命令到现有菜单(「关卡编辑器工具栏」https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/level-editor-toolbar-in-unreal-0405 的各种扩展点):
// 通过 FLevelEditorModule / UToolMenus 注册
FToolMenuOwnerScoped ScopedOwner("MyPlugin");
UToolMenu* Menu = UToolMenus::Get()->RegisterMenu("LevelEditor.MainMenu.MyExt");
FToolMenuSection& Section = Menu->AddSection("MySection");
Section.AddMenuEntry("MyCommand", FText::FromString("我的工具"),
FText::FromString("说明"), FSlateIcon(),
FUIAction(FExecuteAction::CreateRaw(this, &FMyTool::Run)));
适合「一个动作一个入口」的场景,UI 本身交给已有菜单结构。
③ 关卡编辑器模式(EdMode)
EdMode 是场景交互工具的官方框架:「关卡编辑器模式」(https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/level-editor-modes-in-unreal-e-4b5a)。它解决三个问题:
- 在视口里渲染自定义 HUD/提示
- 捕获鼠标点击、拖拽、键盘
- 工具按钮与模式切换的 UI
建模工具、PCG 工具、样条编辑器都是 EdMode。代价:API 复杂、与渲染层耦合深、升级时维护成本高。只有「必须与视口交互」才选它。
④ Detail 面板定制
给特定类定制 Detail 面板:自定义布局、加按钮、条件显示。轻量级入口是「属性矩阵」(https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/property-matrix-in-unreal-engi-981d)——多个资产的同一属性可以表格化批量编辑。深入定制用 FDetailCustomization(C++)。
⑤ 完整插件
跨项目、跨团队复用的工具集,上插件。插件可含 EditorOnly 模块、Slate UI、资源、甚至 Shader(https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/overview-of-shaders-in-plugins-4c05)。工程化细节第三章起展开。
我的选择决策树
需求
├─ 只是批量处理/检查? → ① EUW(蓝图)或 Python
├─ 需要个入口按钮触发动作? → ② 菜单/工具栏命令
├─ 需要在视口里点选拖拽? → ③ EdMode
├─ 需要定制某类资产的编辑 UI? → ④ Detail 定制
└─ 需要独立工具窗口/要分发给别人? → ⑤ 完整插件
心得:一个反直觉的事实——工具的技术选型越「低」越好。蓝图 EUW 做的批量工具,策划改需求也能自己调(蓝图他们看得懂);上了 C++ 插件,每次改动都要找程序员。维护成本上,蓝图工具往往完胜。
