1.5 动手:第一个 EditorUtilityWidget 批量工具
目标
做一个「选中资产批量重命名」工具 —— 界面一个输入框(前缀)+ 一个「预览」按钮 + 一个「执行」按钮。
步骤
- 内容浏览器 → 右键 → Editor Utilities → Editor Utility Widget(UE5 菜单路径:Miscellaneous → Editor Utility Widget)
- 命名
EUW_BatchRename,双击打开 UMG 编辑器 - 拖一个 Vertical Box + Text Block(提示)+ Editable Text(前缀输入)+ Button(预览)+ ListView(预览列表)+ Button(执行)
核心蓝图逻辑(预览按钮):
On Clicked(Preview)
↓
Get Editor Utility Subsystem → Get Selected Assets(Editor Utility Library)
↓
For Each Loop:
↓
新名字 = 前缀 + 资产名
↓
Add 到预览数组(ListView 设 Items)
执行按钮:
On Clicked(Apply)
↓
For Each(选中资产):
↓
Rename Asset(Editor Scripting / Asset 节点,输入 资产 + 新名字)
↓
全部完成 → Get Editor Subsystem → Display Notification(提示成功)
三个新手必踩点
- On Initialized 还是 On Constructed? EUW 只有 On Initialized(UE5.0+ 命名);On Constructed 在编辑器每次打开工具窗口时不一定重触发。初始化逻辑(读配置、刷新列表)放 On Initialized。
- 预览与执行分离:Rename Asset 直接对资产改,支持撤销(编辑器 Transaction 自动支持,Ctrl+Z 可回退)——euw 的资产操作节点大多带 Undo 能力,但「硬来」的文件操作(如 FPlatformFileManager 直接改磁盘)不进撤销栈,慎用。
- 资产保存:重命名后调 Save Asset(或者整个处理完后 Save All Edited Assets)。不然关编辑器会提示未保存。
验证清单
- [ ] 选中的资产能正确读到(Get Selected Assets)
- [ ] 预览列表展示了「将要变成什么」
- [ ] 执行后资产真的改名(内容浏览器刷新可见)
- [ ] Ctrl+Z 能撤销
- [ ] 关闭再开工具,状态正常(不残留旧列表)
加点工程性
工具能跑之后立刻补的三件事:
- 按钮防连点:执行中禁用按钮(后台跑长任务时尤其必要)
- 日志输出:每一步 Print String / UE_LOG,出问题有据可查
- 失败处理:重命名失败(重名/只读)不能让整个 ForEach 崩——每个失败记下来,最后弹汇总
进阶:从蓝图挪到 Python
同样的工具,Python(https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/scripting-the-unreal-editor-us-327f)版十五行:
import unreal
def batch_rename(prefix):
editor = unreal.EditorUtilityLibrary()
assets = editor.get_selected_assets()
for a in assets:
old = a.get_name()
# rename_asset(asset, new_name): 需用 EditorAssetLibrary 或 AssetTools
unreal.EditorAssetLibrary.rename_asset(a, prefix + old)
unreal.log('Renamed %d assets' % len(assets))
蓝图 vs Python 的选择:界面 + 交互蓝图好;批量循环、字符串处理、复杂逻辑 Python 好。两者还能混合——EUW 按钮里 Execute Python Command 节点调脚本,两全。
心得:第一个工具别追求完美,目标是 30 分钟内出能跑的版本,然后让目标用户(策划/美术)用一次,他们的反馈比你想的「再完善一下」有价值十倍。工具的迭代节奏应该是「能用 → 给人试 → 再完善」。
