Blueprint Utilities=Blutility
Blutility使人们能够在编辑器中使用蓝图来制作工具和创建工作流
之前通常在Editor中运行Python脚本来达到自动化操作Editor目的,但编程毕竟需要一定门槛,而蓝图更简单直观,显然是更能被大家接受的方法。
官方文档:
但官方文档较老,里面的一些用法现在已经废弃了。
创建方式
contentbrowser右键,选择EditorUtilities,可以创建EditorUtilityBlueprint和EditorUtilityWidget,后者继承自UMG,因此与一般类进行了区分。
如何使用
创建EditorUtilityObject蓝图,蓝图右键可以执行Run方法
Blutility系统实现
主要相关类
UEditorUtilityObject
EditorUtility的基类,只有一个Run()方法,用蓝图实现。
IEditorUtilityExtension
Interface,代表这个类是Editor中可用的蓝图功能扩展,没有定义任何方法,仅代表一个实现关系。
在leveleditor右键菜单中会去搜索所有继承该Interface的类,然后把可调用的方法列在里面,比如actoraction。
UActorActionUtility
所有actor相关行为功能的基类,有GetSupportedClass方法,表示该Action支持哪些类,不实现的话表示支持所有类。
其子类的方法会在editor中右键一批Actor时出现在菜单中。
UAssetActionUtility
类似UActorActionUtility,是所有asset相关行为功能的基类。
AEditorUtilityActor
EditorOnly actor的基类,有Run()方法。
UEditorUtilityActorComponent
EditorOnly actor component的基类。
UEditorUtilityBlueprint
用于editor功能UBlueprint,编辑、编译前面那些蓝图类。
UEditorUtilityBlueprintFactory
用于editor功能的蓝图工厂,生成UEditorUtilityBlueprint。
UEditorUtilityWidget
用于editor功能的UserWidget,有Run()方法,可以注册到editor的Windows菜单栏。可以通过右键run或者在Windows菜单栏点击打开。
类图:
EditorUtility蓝图创建
UE4首先会创建UEditorUtilityBlueprintFactory,当我们在菜单中创建新的Editor Blutility类时,蓝图工厂就会创建对应蓝图,蓝图类型为EditorUtilityBlueprint。这就是Blutility蓝图与普通蓝图的区别。之后通过编译蓝图,就可以生成我们指定的UClass了。
同理,EditorUtilityWidget蓝图创建方式类似。
UEditorUtilityLibrary
蓝图函数库,暴露一些函数给bluilities使用,比如
GetSelectionSet():获取当前被选择的所有Actor
GetSelectedAssets():获取当前被选择的所有Asset
GetSelectedBlueprintClasses():我们经常需要获取UBlueprint所表示的UClass,该函数可以直接返回所选蓝图生成的UClass
RenameAsset():对资源重命名
示例1 批量checkout
如果要批量checkout大量资源,采用手工一个个操作效率会较低,因此需要自动化方案。
用python实现也不麻烦,但蓝图人人都能上手,门槛更低,我们可以这样做:
第一步,创建一个EditorUtilityObject(当然,创建其他Utility类也可以)
第二步,创建函数CheckoutAssets,并设计蓝图
第三步,在蓝图上右键,选择RunEditorUtilityBlueprint,这样就完成批量checkout了
示例2 选择一批资源,批量改名
如果我们要选择一批资源改名,比如加“DEPREACTED_”前缀,表示这批资源已经被弃用了,就可以使用AssetAction实现:
第一步,创建AssetActionObject,并创建AddPrefix函数,函数接受一个参数
第二步,选择多个asset,右键选择ScriptedActions->AddPrefix
第三步,在弹窗中输入Prefix
然后这些资源就被成功重命名了
示例3 统计场景中某些Actor的数量
如果我们想统计场景中所有luaactor
第一步,创建ActorActionUtility,并创建函数
第二步,场景中在Actor上右键,选择Scripted Actions即可