乐于分享
好东西不私藏

手把手带你入门 UE 编辑器自动化工具-3:给脚本加一个界面[Editor Utility Widget]

手把手带你入门 UE 编辑器自动化工具-3:给脚本加一个界面[Editor Utility Widget]

Editor Utility Widget

在前两篇文章中,我们分别介绍了两类编辑器自动化工具:

  • • 资产编辑器脚本:处理项目资源,例如批量重命名、修改贴图压缩设置、创建资源等。
  • • Actor 编辑器脚本:处理关卡对象,例如批量摆放、设置属性、控制显隐、修改组件参数等。

如果工具只需要执行一两个简单操作,一个脚本按钮或右键菜单通常就够用了。

但随着项目不断推进,我们很容易遇到更复杂的需求:

  • • 执行脚本前,需要输入保存目录、资源前缀等参数;
  • • 需要通过复选框决定是否启用法线贴图、自动保存或覆盖旧资源;
  • • 希望把多个常用脚本整合到同一个工具面板中;
  • • 希望在执行结束后看到成功数量、失败原因等反馈信息。

这时,就可以使用本文要介绍的 编辑器工具控件(Editor Utility Widget)

Tip

Editor Utility Widget 可以理解为运行在 UE 编辑器中的“小工具 UI 面板”。它面向开发者、策划、美术和 TA,而不是游戏运行时的玩家。

借助它,我们可以把原本孤立的脚本按钮,升级成包含输入框、路径选择、复选框、下拉选项和执行日志的完整工具窗口。


🎯 一、编辑器工具控件适合做什么?

我更愿意把 Editor Utility Widget 理解为:将脚本做成可交互的工具面板。

它尤其适合以下几类场景。

1. 为脚本增加操作界面

有些脚本逻辑本身并不复杂,但做成界面后会更方便使用。

例如,我们可以制作一个 Actor 重命名工具:读取 Actor Tag,并通过按钮将 Tag 自动加入 Actor 名称中。使用者只需要选中对象并点击按钮,无须关心脚本的具体实现。

2. 处理不直接依附于资产或 Actor 的功能

如果工具并非单纯处理某个资产或当前选中的 Actor,而是依赖外部路径、文件或参数,Editor Utility Widget 会非常合适。

例如,根据外部文件生成 Actor 时,文件路径经常变化。把路径输入框放在工具界面中,会比每次修改脚本内容灵活得多。

3. 集中管理多个输入参数

当脚本同时需要路径、文本、开关和命名规则等参数时,使用控件统一管理会更加清晰,也能减少反复修改脚本内容带来的错误。

4. 整合多个常用工具

项目中常常会积累很多小脚本,例如:

扫描贴图;生成材质实例;检查资源命名;批量重命名资源;清空或导出日志。

把这些功能集中到一个工具面板中,可以统一入口,让使用者不必到处寻找脚本。


✨ 二、为什么要使用编辑器工具控件?

Editor Utility Widget 最大的价值,是让编辑器脚本从“能用”进一步变成“好用”。

1. 降低使用门槛,让操作更标准

如果只有脚本,使用者需要了解脚本的位置、参数修改方式和执行顺序。制作成工具界面后,美术、策划或场景编辑人员只需要根据按钮和输入框完成操作。

常用路径、命名规则和开关参数也可以统一放在界面中,从而减少路径填错、前缀漏写和规则不一致等问题。

2. 集中管理多个脚本

批量重命名、设置材质、检查资源和生成实例等功能,都可以整理到同一个 UI 面板中。工具入口更统一,日常使用也更高效。

3. 方便持续扩展

工具最初可能只有一个按钮,后续可以逐步加入:

  • • 参数输入、路径选择、日志输出、配置保存、执行进度、错误提示。

随着功能完善,一个简单面板也可以逐渐成长为团队内部常用的编辑器工具。


🚀 三、快速入门:创建第一个编辑器工具控件

下面通过一个简单的批量重命名工具,了解 Editor Utility Widget 的基本使用流程。

第一步:创建 Editor Utility Widget

在内容浏览器中右键,依次选择:

编辑器工具(Editor Utilities) → 编辑器工具控件(Editor Utility Widget)

选择一个合适的父类:

创建完成后,就可以自由设计 UI:

如果右键菜单中没有相关选项,请先检查项目是否启用了编辑器脚本相关插件。

Editor Utility Widget 本质上仍然是一个 Widget 蓝图,但它并不用于游戏运行时,而是作为编辑器中的工具界面运行。

第二步:设计工具界面

打开 Widget 后,可以像制作普通 UMG 界面一样拖入控件。

例如,我们可以先制作一个简单的批量重命名工具:

  • • 一个输入框:填写资源前缀;
  • • 一个按钮:执行批量重命名;
  • • 一个文本区域:显示执行结果。

这就是一个最基础的编辑器工具控件。

第三步:为按钮绑定功能

选中按钮并添加点击事件,然后编写对应的处理逻辑。

与普通 UMG 控件蓝图相比,编辑器工具控件还可以调用很多与编辑器相关的功能,例如:

  • • 获取内容浏览器中选中的资产;
  • • 获取关卡中选中的 Actor;
  • • 修改资产名称;
  • • 获取编辑器子系统;
  • • 在编辑器中生成或选择 Actor。

本例的执行逻辑如下:

  1. 1. 获取内容浏览器中选中的资产;
  2. 2. 遍历资产,读取当前名称并添加输入的前缀;
  3. 3. 重命名资产并输出执行结果。

第四步:运行工具控件

创建完成后,可以在内容浏览器中右键运行 Editor Utility Widget,也可以通过编辑器菜单打开它。

运行后,工具会以编辑器窗口的形式出现。窗口既可以停靠在编辑器中,也可以单独浮动。

它不是游戏内 UI,而是一个可以长期保持打开的编辑器工作面板。我们可以一边编辑资源,一边使用其中的工具功能。

第五步:执行并查看反馈

输入参数并点击按钮后,工具会自动完成处理,并把执行结果反馈到界面中。

至此,一个包含参数输入、脚本执行和结果反馈的基础工具就完成了。

🧪 四、两个实用案例

掌握基础流程后,我们再来看两个适合使用 Editor Utility Widget 的常见场景。

案例一:一键选中符合条件的 Actor

编辑器工具控件不仅可以处理资产,也非常适合制作场景筛选工具。

例如,我们希望制作一个按钮:在当前关卡中,一键选中所有移动性为 固定 的 StaticMeshActor。

1. 制作简单界面

创建一个编辑器工具控件,并在界面中放入一个按钮:

选中固定 StaticMeshActor

使用者无须寻找或理解脚本,只需点击按钮即可完成筛选。

2. 编写筛选逻辑

在按钮点击事件中:

  1. 1. 遍历当前关卡中的 Actor;
  2. 2. 判断 Actor 是否为 StaticMeshActor;
  3. 3. 继续判断其移动性是否为 固定
  4. 4. 将符合条件的 Actor 加入待选中列表;
  5. 5. 更新编辑器中的选中对象。

3. 运行工具并反馈结果

运行工具后点击按钮,符合条件的 Actor 会自动在大纲中被选中,同时可以在日志中输出:

✅ 已选中 3 个固定 StaticMeshActor。

这个案例虽然简单,但思路非常通用。我们可以继续扩展为:
  • • 选中某个蓝图参数为指定值的 Actor;
  • • 选中使用指定材质的 Actor;
  • • 选中带有某个 Tag 的 Actor;
  • • 选中名称包含某个关键字的 Actor。

很多重复的“查找、筛选、选中、批处理”操作,都可以整理成工具面板中的快捷按钮。


案例二:根据 CSV 文件批量生成 Actor

第二个案例是制作一个“根据 CSV 文件生成 Actor”的工具。

这个案例很适合体现编辑器工具控件的价值:它既不只是处理某个资产,也不是单纯操作当前选中的 Actor,而是需要输入外部文件路径,再根据文件内容在场景中批量创建对象。

CSV 内容示例:

1. 设计工具界面

界面中可以放入以下控件:

  • • CSV 文件路径输入框;
  • • “生成 Actor”按钮;
  • • 执行日志显示区域。

2. 编写执行逻辑

本例使用 Blueprint File SDK 插件读取文件,整体逻辑如下:

  1. 1. 根据输入路径读取 CSV 内容;
  2. 2. 解析位置X、Y、Z字段;
  3. 3. 根据数据在关卡中生成对应 Actor;
  4. 4. 统计成功生成的Actors数量;
  5. 5. 将结果显示在日志区域。

3. 执行并显示结果

使用时,只需要输入 CSV 文件路径,然后点击“生成 Actor”按钮。脚本会读取 CSV 中的数据,并在关卡中批量生成对应 Actor。

执行完成后,可以在日志中显示类似信息:

✅ 已读取 30 条数据,成功生成 30 个 Actor。

这个案例的重点不在 CSV 本身,而在于说明:

Important

当工具需要外部路径、多个参数和执行反馈时,Editor Utility Widget 通常会比单独脚本更直观,也更适合交给团队中的其他成员使用。


⚠️ 五、制作编辑器工具时的注意事项

Editor Utility Widget 很方便,但在真实项目中使用时,还需要注意以下几点。

1. 从简单功能开始,逐步扩展

不要一开始就把界面设计得过于复杂。建议先用一个按钮跑通核心逻辑,再逐步增加输入框、路径选择、日志和配置保存等功能。

工具开发的重点是先解决问题,再完善体验

2. 为参数提供合理的默认值

如果工具需要交给美术或其他同事使用,输入框最好不要全部留空。

可以提前设置默认路径、默认前缀、默认命名规则和默认勾选状态,让使用者打开工具后就能快速理解如何操作。

3. 一定要提供执行反馈

批量处理资产或 Actor 时,建议明确显示:

  • 扫描了多少对象;成功处理了多少对象;跳过了多少对象;有多少操作失败;失败的具体原因。

缺少反馈的批处理工具,很容易让使用者怀疑操作是否真正执行成功。

4. 危险操作需要二次确认

批量删除、覆盖、重命名和移动资源等操作,最好先提供扫描或预览结果,再让使用者确认执行,避免一次误操作改动大量资源。

Warning

对资源进行批量修改前,尽量支持撤销、预览或二次确认,并清晰提示操作影响范围。

5. 尽量分离 UI 与业务逻辑

简单工具可以直接把逻辑写在 Widget 中。

当功能逐渐复杂后,建议把具体处理逻辑封装到蓝图函数库、编辑器子系统或 C++ 类中。Widget 只负责读取参数、调用功能和显示结果,后续维护与扩展会更加方便。


🧭 六、可以继续进阶的方向

Editor Utility Widget 只是工具入口。掌握基础用法后,还可以继续向以下方向扩展。

1. 保存常用配置与预设

对于经常变化、但会重复使用的参数,可以将它们保存为配置或预设。

例如:

  • • 灯光工具中的暖光、冷光和夜景光配置;
  • • 资源工具中的默认路径和命名规则;
  • • 批处理工具中的常用勾选项状态。

下次打开工具时,使用者可以直接加载预设,无须重新填写。

2. 整理为团队内部工具插件

当工具数量越来越多时,可以按照功能整理成团队内部插件,例如:

  • • 资源处理工具;场景编辑工具;材质生成工具;数据导入工具。

这样既方便统一分发与版本管理,也能让团队成员使用同一套标准流程。

3. 增加更完整的辅助功能

后续还可以加入:

  • • 资产检查、批量处理、常用命令行入口、资源预览、进度显示、错误定位与修复建议。

例如,扫描贴图是否缺少法线、检查资源命名是否规范,或批量执行导入命令。随着功能不断完善,工具面板会从“执行脚本的入口”逐渐变成完整的编辑器生产工具。


💡 七、总结与下篇预告

通过 Editor Utility Widget,我们可以把零散的编辑器脚本整理为可交互的工具面板。

它非常适合用于:

  • • 参数输入;径选择;按钮集合;日志反馈;批量流程控制。

相比单独执行脚本,工具控件具有以下优势:

  • • 使用门槛更低:打开面板、填写参数、点击按钮即可执行;
  • • 操作流程更标准:统一参数、路径与命名规则;
  • • 扩展维护更方便:可以逐步加入日志、预设、进度和错误提示。

对于美术、策划和场景编辑人员来说,一个设计清晰的工具面板,可以显著减少重复操作和沟通成本。

🔜 下篇预告

下一篇将制作一个更加完整的实战工具:

选中多套贴图后,自动生成对应的多个材质实例。

工具会自动识别名称中包含 BaseColor、Normal、AO、Roughness 等标记的贴图,生成对应的 MI_XXX 材质实例,并自动完成贴图赋值。

特点是:创建UE资产、修改资产参数、从纹理生成材质

大家平时在 UE 里最讨厌的重复劳动是什么?可以公众号留言私信或者添加微:qingdoushashou 告诉我,后续我抽一个写教程。

觉得好的话点个赞吧

希望你能在这里学到点东西,每天进步一点点

扫描二维码关注账号:

以上内容在多平台同步发布:

  • 1.知乎:旺仔好喝-黄河

  • 2.公众号:UE5研究院

  • 3.ima知识库:虚幻引擎UE成长之路