脚本化操作

创建可通过右键点击内容浏览器中的资产或关卡中的Actor来调用的蓝图。

Windows
MacOS
Linux

脚本化操作 是编辑器工具蓝图,右键点击 内容浏览器 中的资产,或右键点击 关卡视口(如上所示)或 世界大纲视图 中的Actor,即可进行启动。

蓝图逻辑需拥有对资产或Actor集的情境感知时,此类工作流程将十分有用。通常,脚本化操作会获取运行操作时选中资产或Actor的列表,然后修改此类对象或将之纳入图表的考量中。

本页指南将展示创建和启动此类编辑器工具蓝图的方法,以及如何自定义以只应用于特定类型的资产或Actor。

步骤

在此过程中,将利用支持脚本化操作的父类来新建编辑器工具蓝图类,同时设置该类的新事件图表(显示为脚本化操作)。

  1. 内容浏览器 中,右键点击要在其中创建新类的文件夹,然后在快捷菜单中选择 编辑器工具(Editor Utilities)> 编辑器工具蓝图(Editor Utility Blueprint)
    创建编辑器工具蓝图

  2. 决定是在 内容浏览器 中选择的资产上,还是在 关卡视口世界大纲视图 中选择的Actor上执行脚本化操作。

    • 若要在资产上执行脚本化操作,选择 AssetActionUtility 作为父类,然后按 选择(Select)

    • 若要在Actor上执行脚本化操作,选择 ActorActionUtility 作为父类,然后按 选择(Select)

    选择ActorActionUtility或AssetActionUtility

  3. 内容浏览器 中指定新类的描述性名称。
    命名新类

    运行该类的脚本化操作时,将隐藏该类命名。若之后要修改脚本化操作或添加新操作,只需将该类与项目的其他蓝图类进行区分即可。

  4. 在蓝图编辑器中双击新类以打开。

  5. 要创建该类的脚本化操作,可选择新建函数,或在该类的事件图表中新建 Custom Event 节点。

    确保在函数条目节点或Custom Event节点上勾选 在编辑器中调用(Call in Editor) 复选框。新建函数时将自动完成该操作,但若选择使用Custom Event节点,则须手动完成操作。

    例如,该 AssetActionUtility 上的新函数将在内容浏览器中选中的资产列表中迭代,并在 关卡视口 中打印各资产命名。

    下图显示了在 ActorActionUtility 上实现的类似函数。

    开发(Development)> 编辑器(Editor) 类别下包含部分有益于脚本化操作的蓝图节点,包括上述范例中的节点,此类节点将返回在运行脚本化操作时选中对象的列表:Get Selected Assets(返回 内容浏览器 内所有选中资产的引用排列)和 Get Selection Set(返回当前在关卡内选中的Actor排列)。

    若尚未安装 编辑器脚本编写工具 插件,建议进行安装以访问用于使用资产和关卡Actor的额外函数库。参阅编辑器脚本编写和自动化

  6. 保存(Save)编译(Compile) 蓝图类。

最终结果

保存并编译蓝图类后,根据选择的蓝图类父类,快捷菜单中将显示资产或Actor的新 脚本化操作(Scripted Actions) 子菜单。该子菜单包含在蓝图类中设置的所有函数或Custom Event节点。

例如,在 内容浏览器 中右键点击一个或多个资产时:

在选中资产上运行脚本化操作

或在 关卡视口世界大纲视图 中右键点击一个或多个Actor时:

在选中Actor上运行脚本化操作

AssetActionUtilityActorActionUtility 类上设置的所有函数和Custom Event节点均可作为快捷菜单中可用的单独选项。可按需在单个蓝图类中任意创建多个不同脚本化操作,或创建多个蓝图类并在其中分配脚本化操作。

将操作限制为特定类

根据脚本化操作要执行的工作,可能需在快捷菜单中仅显示特定对象类型的脚本化操作。

例如,假设要创建修改选中Actor上材质的脚本化操作。建议仅在用户右键点击静态网格体Actor时出现该操作,而非在用户右键点击光源Actor或蓝图时出现。

AssetActionUtilityActorAssetUtility 基类均都提供名为 GetSupportedClass 的内置函数。该函数将决定需选中对象的类,以在快捷菜单内显示蓝图类中的脚本化操作。用户右键点击资产或Actor集时,会调用该函数来获取 AssetActionUtilityActorAssetUtility 类支持的类类型。若其返回类类型,则该返回值将与用户当前选择的资产或Actor集进行比较。若此类资产或Actor中至少有一个类与 GetSupportedClass 返回的类匹配,则快捷菜单中将显示脚本化操作。GetSupportedClass 函数默认不返回内容。因此无论选中资产或Actor的类为何,此操作将固定显示所有脚本化操作。

若要修改此默认行为,可覆盖类中的 GetSupportedClass 函数以返回特定类类型:

覆盖GetSupportedClass

例如,ActorAssetUtility 中的该实现会返回 StaticMeshActor 类:

返回StaticMeshActor的GetSupportedClass的实现

利用该实现,若用户在打开快捷菜单时至少选中一个静态网格体Actor,则快捷菜单中将显示该类中的脚本化操作:

对支持类显示的脚本化操作

但在用户仅选中其他类型的Actor时,将不会显示该脚本化操作:

不会对其他类显示的脚本化操作

若选中多个资产或Actor,则允许该行为:只要所选项目中 至少有一项GetSupportedClass 返回的类匹配,快捷菜单中将显示脚本化操作。即使覆盖 GetSupportedClass 来限制操作处理的类,也无法保证运行操作时 选择该类的实例。务必在实现蓝图图表时铭记此点。

动态输入

可设置脚本化操作,以需求调用操作的用户的信息。若向函数条目节点或Custom Event节点添加一个或多个 输入,在编辑器中运行脚本化操作时均会要求提供该输入。在脚本需要额外信息(每次调用操作时此类信息可能有所不同)时,此设置非常有用。

例如,该函数有三个输入:字符串、Actor对象引用和材质对象引用:

具有输入的函数

运行该函数的脚本化操作时,编辑器将弹出可设置此类输入值的小窗口:

设置输入值

编辑器将验证所有输入是否与其应匹配的值类型匹配。但此操作无法保证输入必然有值,或者此类值在特定情境中有意义。注意:脚本应处理未指定的输入值,并验证用户提供的输入值。

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback