Bootstrap Chameleon Logo

最常用的编辑器API

编辑器API中的MVP

我在的实际的某个工程中统计了EditorAPIs的出现次数,下面这100个API绝对是Unreal Python中的MVP

TIP
下面这些API中,以unreal.Python...Libunreal.ChameleonData开头的为TAPython的扩展API,其他的为UE内置的API

交互

我们在写编辑器工具的时候,交互相关的API是最常用的,比如弹窗,消息提示,日志,通知,文件对话框等等。

API前的数字表明使用的频率,数字越大则使用越频繁。

在控制台输出警告信息

弹出式的通知信息,是这对非开发者用户很友好的通知形式

通过工具路径找到对应的ChameleonData,用于在A工具中找到B工具的实例。修改其中的内容等等

在控制台输出Log和出错信息

弹出确认对话框

打开文件对话框

弹出消息对话框

获取Chameleon窗口的大小

设置剪贴板内容

打开目录对话框

设置Chameleon窗口的大小

关闭Chameleon窗口,用于在主工具中,关闭其他的Chameleon工具,其他

截图Chameleon窗口中的界面内容,将其保存为png图片

Assets

下面包含了和资源相关的API,比如加载资源,获取指定类型的资源,保存资源,删除资源,导入资源等等。

从路径加载资源

判断资源是否存在

保存指定路径的资源

获取unreal的AssetTools,很多和资源相关的操作都是通过这个AssetTools来完成。例如create_asset,duplicate_asset,export_assetsrename_assets等等

获取特定类型的资源的AssetDatas,比如获取所有关卡资源("World"),或者获取所有的材质实例("MaterialInstance")

删除指定位置的资源

保存所有已经标脏(已修改,未保存)的资源

其他一个导入资源的task

获取当前选中的资源的路径

复制已经加载的资源资源

Level/World

关卡Level和World也是我们在编辑器经常需要操作的对象,比如获取当前的关卡,获取当前的World,保存当前的关卡,加载关卡等等。

获取当前的编辑器World,UE4中使用

获取当前选中的所有Actors

获取当前的编辑器World,UE5中使用

保存当前的关卡

通过路径加载关卡

保存所有已标脏(已修改,未保存)的关卡

获得指定World中的所有level

获取当前项目的路径

为当前world添加一个关卡

通过名字指定当前激活的关卡。我们可以通过get_levels获取所有的关卡,然后通过set_current_level_by_name来激活指定的某一个关卡

Viewport

视窗相关的API,可以让我们修改当前视窗中的相机等

获取当前场景相机的位置和旋转

获取当前视窗中的像素内容,例如将视窗中的内容发送给stable-diffusion等其他工具,就用到了这个API

强制重绘当前视窗,例如我们修改了视窗中的相机观察的对象,并想要截取视窗内容,在截取之前,我们需要确保视窗中的内容是新的,就需要调用这个viewport_redraw

将视窗的显示设置为'游戏模式',等同于在编辑器状态下的快捷键G

设置当前场景相机的位置和旋转

Selections

下面这些API都是和选中相关的,比如获取当前选中的Actor,获取当前选中的资源,设置当前选中的资源等等。

在编辑中选中指定的Actor

在Content Browser中选中指定路径的资源

将World Outliner中选择的物体指定到特定Folder.注意这里的Folder是Outliner中的Folder,而不是Content Browser中的

在编辑中选中指定的Actor, UE5中使用

取消选中所有的Actor

在编辑中选中指定的Actor, UE4中使用

TIP
在这里,我们会发现有多个API功能比较类似, 例如:unreal.PythonBPLib.select_actor,unreal.get_editor_subsystem(unreal.EditorActorSubsystem).get_selected_level_actors,unreal.EditorLevelLibrary.get_selected_level_actors都是选中指定的Actor。
原因是TAPython最早是在UE4.21的版本开始开发的,陆续添加了一些当时引擎中没有(或者我不知道)的API,同时UE5在逐渐将各个EditorLibrary迁移成各个Subsystem的时候,也造成了重复的API。

Actor/Component

场景中的Actor和Component相关的API

获取编辑器中指定类型的所有对象

通过指定的类创建一个Actor,比如在创建中Spawn一个unreal.StaticMeshActor

获取当前编辑器中的所有Actor

获取当前选中的物理Asset中的所有形体(Body)的索引

为指定的Actor添加一个Component。例如给一个Actor添加一个unreal.StaticMeshComponent组件

获取指定名称(ID Name)的Actor。注意这里是ID Name,不是Actor的Label Name

创建(复制)一个指定的Actor到场景中

获取当前选中的所有Component

Query/Modify

UE 对象中的编辑器,很大一部分都通过get_editor_propertyset_editor_property来获取和设置。各个EditingLibrary也提供了对资源、Object等对象的修改操作。除了这些以外,TAPython也提供了一些API来获取和设置。当然,如果需要更多或者特定的API,也可以自己添加

在材质中连接两个节点

在材质/材质函数中添加一个材质节点

设置/获取材质实例的scalar和texture参数

为UserDefinedStruct添加一个变量

获取材质中所有Scalar参数的名称

获取UserDefinedStruct中所有变量的名称

填充RenderTarget中的数据(修改RenderTarget)

获取DataTable中所有行的名称

设置材质中指定StaticSwitch中的值

获取材质实例中指定Texture参数的值

获取物理资源中指定骨骼上的所有形体(Bodies)

移除UserDefinedStruct中指定名称的变量

给User Defined Struct中添加一个字典类型的新变量

获取材质中所有使用的纹理(不会获得在材质中存在,但未连接的贴图)

获取指定材质的静态开关info,包括是否override等

设置DataTable中指定位置的内容

获取指定DataTable的“行列”信息,不包括标题和行名称,Get the Shape of the given datatable. The title and the row names are not included.

获取指定DataTable中所有列的名称

设置材质中指定Scalar参数的值

在材质中自动布局节点

重新编译材质

设置物理材质中指定的形体(Body)的旋转值

通过PropertyName获取User Defined Struct中指定变量的GUID,在unreal.PythonStructLib.rename_variable等API中,需要使用这个GUID来指定要修改的变量

设置材质实例中指定的Vector参数的值

获取/设置材质中所有Vector参数的名称

获取材质实例中指定的Scalar参数的值

在DataTable中添加一行

设置DataTable中指定位置的内容

获取指定Enum的长度

指定材质实例的父材质

通过y轴和z轴构造一个旋转值(Rotator)

在地形的指定方向上创建新的LandscapeProxy

Misc

下面是一些杂项API,在我们编写编辑器工具的时候也是非常有用的

用于为耗时任务添加进度条

通过字符串,执行Python命令,可在子线程中指定这些python命令是否强制在GameThread中执行

获取Editor Subsystem,常用的SubSystem有:EditorActorSubsystem, AssetEditorSubsystem, LayersSubsystem, UnrealEditorSubsystem, ImportSubsystem, EditorValidatorSubsystem等等

用于使得后续操作支持编辑器中Undo,Redo功能

通过字符串,执行Cmd中的调试命令

强制触发UE的垃圾回收

将字符串转换为Guid格式。例如"A92FC5D4442EF780C79EB49C16F7250E"转换为Guid

获取指定对象的所有依赖和引用

获取当前按下的修饰键,例如Shift, Ctrl, Alt等

注册一个Slate Post Tick回调,这个回调会在Slate的Post Tick中执行

参考

How to manipulate User Defined ENum, Struct, DataTable with Python in Unreal Engine

Manipulate Material Expression Nodes of Material with Python in Unreal Engine

Modify SImage content and Set Pixels to RenderTarget in Unreal Engine