编辑器实用工具蓝图入门

科技   2024-10-25 12:50   上海  
本教程探索使用编辑器实用工具蓝图定制编辑器工作流程的不同方法。
简介
欢迎!
通过本教程,您将学习如何:
-设置脚本操作。
-创建并运行编辑器实用工具控件。
-在界面中添加您自己的自定义菜单和按钮。
-在启动时运行编辑器实用工具。
-使用无界面实例运行编辑器实用工具。
-通过编辑器实用工具蓝图使用Python。
本教程中的所有示例都可以在以下项目文件中找到。
项目文件:https://epicgames.ent.box.com/s/jvpif2782bmn9ugybmyrxhk40d021ecu
注意,一些路径需要根据您的设置进行匹配修改——我们将在教程中浏览这些路径!
让我们开始吧!
1.脚本化操作
您可以使用脚本化操作在筛选过的资产或Actor类上运行脚本。在本节中,我们将学习如何创建以下内容:
  • 简单的用于更改选定静态网格资产上的材质的脚本化资产操作。
  • 用于批量编辑选定的灯光Actor属性的脚本化Actor操作。
a.脚本化资产操作
在本示例中,您将创建一个脚本来更改选定静态网格资产上的材质。您可以在附件项目中的/Game/BlueprintUtilities/ScriptedActions目录找到示例。

首先,创建一个新的编辑器实用工具蓝图资产,该资产的父类是AssetActionUtility。

打开新蓝图,然后前往“类默认设置”属性,在“支持的类数组”中添加静态网格。
如果要过滤蓝图资产类,则必须将IsActionForBlueprints复选框设为 true。
在本示例中,蓝图中添加了两个函数,一个将所选静态网格资产的材质修改为红色,另一个是将材质修改为绿色。

您可以在函数的“详细信息”面板中设置“类别”,以便在子菜单中组织这些功能。两个函数将设置相同的类别名称。

注:您可以设置描述字段来覆盖脚本操作的工具提示!(默认情况下与函数名称一致)

现在,将以下蓝图片段添加到这两个函数中。请注意,您可以在“设置材质”节点中任意修改材质。本示例使用了引擎附带的简单材质,资产设置如下:

/Script/Engine.Material'/Engine/MapTemplates/Materials/BasicAsset01.BasicAsset01'为红色材质。

/Script/Engine.Material'/Engine/MapTemplates/Materials/BasicAsset03.BasicAsset03'为绿色材质。

设置好这两个函数后,就可以编译并保存脚本化资产操作蓝图了。
现在,如果您选择了一个或多个静态网格资产,就会出现一个名为“脚本化资产操作”的新右键菜单项,您可以在其中使用自己的函数。这些按钮的文本由我们在前面几步中创建的函数名称定义。工具提示描述将默认为函数名称,但您可以通过编辑函数“详细信息”面板中的“描述”字段进行修改。
现在,选择任一选项都将改变所选静态网格资产的材质!

b.脚本化Actor操作

脚本化Actor操作与脚本化资产操作的设置工作流程基本相同。以下是创建简单灯光自定义实用工具的不同步骤。

选择父类时,请选择ActorActionUtility类。
支持的类应当是Actor类而不是资产类。本示例进行了筛选,确保只有使用了灯光的父类Actor才能启用实用工具操作。
您需要在我们的ActorActionUtility蓝图中创建一个蓝图函数。该函数需要以下两个输入(在函数的“属性”面板中设置):
在您创建的函数中,添加以下蓝图片段。

编译并保存您的蓝图,然后添加并选择一个或多个灯光Actor(这适用于任何以Light类为父类的灯光类型)。

现在,您可以使用便捷菜单批量编辑所选灯光的属性!

在执行脚本化Actor操作时,您在函数属性面板中添加的每个可编辑输入将在弹出窗口中显示。

注:脚本化资产操作也具有此功能!

2.编辑器实用工具控件

a.编辑器实用工具控件

在这个编辑器实用工具控件的示例中,您将创建一个工具来生成和编辑灯光Actor。
您可以在附件项目中的/Game/BlueprintUtilities/Widgets目录找到该控件。

首先,在内容浏览器中创建编辑器实用工具控件资源。

该工具将允许用户使用ComboBoxString控件选择灯光类型/类别和灯光的移动性。以下UMG层次结构包含所有必要的UI元素。

一旦UI布局准备就绪,您就可以移动到编辑器实用工具控件的图表部分。首先创建一个函数来处理所有的灯光创建逻辑。

完成此操作后,您可以将函数连接到控件按钮的“点击”事件,如下所示:
如果“点击”事件未显示在图表中,请确保在控件编辑器的“设计者”选项卡中将按钮的IsVariable复选框设置为true。
通过单击“详细信息”面板“事件”部分中的“+”按钮创建OnClicked事件调用。

完成此操作后,编译并保存您的编辑器实用工具控件。

然后,您可以使用资产上的右键菜单运行它。

您还可以通过点击“运行实用工具控件”按钮从编辑器实用工具控件的编辑器窗口运行控件。
现在,您可以使用一个工具来生成具有您选择的类和移动能力的灯光Actor!

有关编辑器实用工具控件的详细文档,请访问以下链接:

https://dev.epicgames.com/documentation/en-us/unreal-engine/editor-utility-widgets-in-unreal-engine

3.使用编辑器实用工具蓝图修改菜单

可以修改编辑器工具栏以集成自定义工具。在本节中,您将快速了解如何向界面添加子菜单和菜单项。
您将创建的资产也能在附件项目中的/Game/BlueprintUtilities/ToolbarEditorUtility目录下找到。

a.定制化主菜单

Ⅰ.添加菜单

向主菜单中添加一个菜单。您可能需要创建一个父类EditorUtilityToolMenuEntry的编辑器实用工具蓝图。
打开新的编辑器实用工具蓝图后,在图表中添加逻辑,使用以下代码段的“运行”自定义事件注册菜单项对象:

现在转到蓝图的类默认值,并填写“数据”部分如下:

最重要的字段是“菜单”,它定义了您的菜单项在什么地方。其“名称”将是菜单的内部名称(后续步骤的重要属性),“标签”是菜单的显示名称。

对于此菜单项,您不需要更改其余属性。

编译并保存蓝图后,我们现在可以考虑执行我们创建的“运行”事件来注册菜单项。为此,您需要将以下代码段添加到DefaultEditorPerProjectUserSettings.ini配置文件中(需要替换资产的路径和名称以匹配您的项目!):

[/Script/Blutility.EditorUtilitySubsystem]
#ToolMenu scripts to run on startup#Menu Object for the Main Menu+StartupObjects=/Game/BlueprintUtilities/ToolbarEditorUtility/ToolMenu_TestMenu.ToolMenu_TestMenu
如果您重新启动引擎,我们现在可以在您的主菜单中看到一个全新的菜单!

不过,这个菜单现在什么功能也没有!
让我们添加一个菜单项!

Ⅱ.添加菜单项

添加菜单项的过程与添加菜单非常相似。在本章中,您将添加一个菜单项来打开编辑器实用工具控件。
首先,使用编辑器实用工具菜单的菜单项父类创建第二个编辑器实用工具对象。您可以复制用于创建菜单的蓝图。

为您的“运行自定义事件”添加一个“覆盖”功能(在新蓝图中仍然需要!)。然后覆盖“执行”功能。

事件执行节点需要使用编辑器实用程序子系统的生成和注册选项卡节点执行以下代码段:

您可以为“In Blueprint”变量使用任何您想要的编辑器实用工具控件。对于此例,您将使用本教程贴出的项目中提供的一个简单的控件。

完成图表后,您应该有类似于以下代码段的内容:

现在,您可以转到蓝图的类默认值。

请注意“菜单”属性现在如何引用LevelEditor.MainMenu.TestMenu...这是正确的!“菜单”是指菜单的层次结构。

通过在LevelEditor.MainMenu末尾添加.TestMenu,您可以将菜单项放入您在第3.a.Ⅰ节创建的“测试菜单”中!

最后一步是将StartupObject添加到配置文件中。对于您的第一个菜单启动对象,它应该看起来像以下代码片段:

[/Script/Blutility.EditorUtilitySubsystem]
#ToolMenu scripts to run on startup#Menu Object for the Main Menu+StartupObjects=/Game/BlueprintUtilities/ToolbarEditorUtility/ToolMenu_TestMenu.ToolMenu_TestMenu#Menu Entry Object for the TestMenu above+StartupObjects=/Game/BlueprintUtilities/ToolbarEditorUtility/ToolMenu_TestEntry.ToolMenu_TestEntry

现在,您如果重新启动引擎,应该会在自定义菜单中看到一个按钮。

由于您添加了在单击按钮时生成编辑器实用工具控件的逻辑(通过“事件执行”函数覆盖),因此单击按钮将打开控件的新实例。

下一节将介绍如何将按钮直接添加到您选择的工具栏部分。

b.添加工具栏按钮

除了向主工具栏添加元素外,您还可以向其他工具栏添加按钮。

要查看工具栏的“菜单”名称,请输入命令行ToolMenus.Edit 1,然后单击要添加的按钮部分中的齿轮图标。为演示本例的目的,选择工具栏左下角空白部分中的齿形图标。

在“编辑菜单”窗口中,查看菜单的“名称”属性:这将被用于EditorUtilityToolMenuEntry Editor实用程序蓝图中的“菜单”属性。对于辅助工具栏,您需要使用的菜单名称是LevelEditor.SecondaryToolbar。

现在您已知菜单名,请输入命令行ToolMenus.Edit 0以禁用编辑模式。

在项目中添加新的“编辑器实用工具菜单项”编辑器蓝图。该项将作为您选择的“内容浏览器”文件夹的快捷方式。有关如何使用EditorUtilityToolMenuEntry父类创建编辑器实用工具蓝图的教程,请参阅步骤3.a.Ⅰ。

这一次,需要对“数据属性”进行更多修改。

在数据中输入的第一个重要属性是“菜单”。使用之前的名称“LevelEditor.SecondaryToolbar”。

“名称”、“标签”和“工具提示”都可以根据您的喜好按需修改。

在“图标”部分,第一个属性“样式集名称”需要设置为EditorStyle。忽略此字段会使得按钮的图标不正确。

对于“样式名称”和“小样式名称”字段,您需要打开“纹理图集可视化工具”,检查要使用哪个图标以及它有什么名称(在本例中,“样式名称”和“小样式名称”将设置为相同的图标)。

纹理图集可视化工具可通过“工具”->“调试”菜单中的“控件反射器”访问。

然后在控件反射器中,使用“显示纹理图集”访问“图集”菜单中的“纹理图集可视化工具”。

纹理图集可视化器中,悬停图标可以在“被使用”部分看到名称引用。在下面的示例中,ContentBrowser.ListViewFolderIcon将成为在按钮的“样式名称属性”中使用的名称。图标的大小并不重要,它将被缩放以适应工具栏,且不会使其变形。

填入“样式名称”和“小样式名称”字段后,对“工具菜单项”进行的最后一次更改是将其“菜单项类型”修改为“高级”部分中的“工具栏按钮”。

现在,您可以继续使用蓝图的图表逻辑了!与所有其他菜单项对象一样,您需要按如下方式添加运行逻辑:

您还将覆盖“事件执行”函数,并添加以下节点(当然,您可以在“生成数组”节点中使用任何项目文件夹路径):

现在,每次单击我们添加的文件夹按钮时,您选择的文件夹都会在内容浏览器中打开。

即将大功告成...但请您不要忘记在DefaultEditorPerProjectUserSettings.ini中将新的编辑器实用工具蓝图添加为“启动对象”!

[/Script/Blutility.EditorUtilitySubsystem]
#Menu Entry Button for the Secondary Toolbar+StartupObjects=/Game/BlueprintUtilities/ToolbarEditorUtility/ToolMenu_SecondaryToolBarButton.ToolMenu_SecondaryToolBarButton
编译您的蓝图,保存所有内容,然后再次重新启动引擎。。。看!
您的自定义按钮已经出现在工具栏中!点击它也会自动打开您在蓝图图表中提供的文件夹的内容浏览器。
当然,您可以使用“纹理图集可视化工具”中可访问的任何图标,将按钮放置在任何工具栏中,并运行您要运行的任何蓝图图表!

4.在编辑器启动时运行编辑器实用工具

您将要在本章节中创建的资产也在附件项目中的/Game/BlueprintUtilities/StartupUtilityScript目录下提供。
首先,您需要父类Bluetility.EditorUtilityObject的编辑器实用工具蓝图,并将其命名为EUO_StartupScript。

对于此示例,您可以在蓝图图表中以如下方式将“打印字符串”节点添加到“事件运行”中。

在项目的config文件夹中创建一个名为DefaultEditorPerProjectUserSettings.ini的配置文件,并向其中添加以下代码段(要确保文件夹层次结构与您的项目匹配!):

[/Script/Blutility.EditorUtilitySubsystem]
#Editor Utility script to run on startup+StartupObjects=/Game/BlueprintUtilities/StartupUtilityScript/EUO_StartupScript.EUO_StartupScript

现在,每次在编辑器中打开项目时,都会运行您的EUO_StartupScript蓝图。

本教程的深入版本可以在以下链接中找到:
https://dev.epicgames.com/documentation/en-us/unreal-engine/running-blueprints-at-unreal-editor-startup
5.在无界面模式下运行编辑器实用工具
要运行项目的无界面实例,请在项目的根目录下创建一个.bat文件,然后向其中添加以下代码段,并修改不同的路径以匹配UE可执行文件的位置和项目名称:
:: Copyright Epic Games, Inc. All Rights Reserved
:: Instructions: Update the following paths to point to your UE executable and uproject fileSET UE5_PATH=d:\EpicGames\UE_5.4\Engine\Binaries\Win64\SET PROJECT=%~dp0EditorUtilitySamples.uproject
%UE5_PATH%\UnrealEditor-Cmd.exe %PROJECT% -nosplash -nocontentbrowser -nopause -Unattended -NullRHI Log=HeadlessExample.log -ini:EditorPerProjectUserSettings:[/Script/Blutility.EditorUtilitySubsystem]:StartupObjects=/Game/BlueprintUtilities/StartupUtilityScript/EUO_HeadlessStartupScript.EUO_HeadlessStartupScript
PAUSE

此示例运行编辑器实用工具对象EUO_HeadlessStartupScript(与您在上一章中创建的EUO_StartupScript相同)。打开编辑器在运行.bat脚本时创建的HeadlessExample.log日志文件时,您应该能够搜索“无界面模式”并找到蓝图在什么时候开始运行的。

6.使用Python语言和编辑器实用程序
a.设置Python附加路径
要设置附加路径,以便在没有完整路径的情况下调用Python脚本,请将附加路径添加到“项目设置”中。
注:此步骤是可选的,但强烈建议操作!
“插件-Python”部分中的“附加路径”数组可以根据需要使用任意数量的路径进行编辑。

如果您使用的是本教程附带的项目,则示例的.py脚本位于/ReditUtilitySamples/Python目录中。

现在,您可以调用位于“附加路径”中的所有脚本,如以下示例所示。
b.在项目启动时执行Python脚本
您可以在启动时运行任意数量的Python脚本,方法是添加每个脚本的完整路径,或者如果您添加了步骤6.a中提到的“附加路径”,则可以在其中一个路径中输入脚本的名称。

要填写的数组称为“启动脚本”,位于上述项目设置中相同的“插件-Python”部分。

上面示例中的StartupScriptExample.py脚本在编辑器启动时加载一个关卡,并使用以下代码段:

import unreallevelManager = unreal.get_editor_subsystem(unreal.LevelEditorSubsystem)
startupLevel = levelManager.load_level('/Game/BlueprintUtilities/StartupUtilityScript/LevelToLoadOnStartup')

c.在蓝图中执行Python命令

Python的实现增加了对从蓝图图表执行Python命令的支持。您可以使用“执行Python命令”节点运行Python代码片段或.py脚本,如下所示:

尽管非必需,您仍然可以使用蓝图节点IsPythonAvailable添加一个检测,以确保Python配置正确且可用。
注:使用“执行Python命令”时,任何错误代码都将写入“输出日志”。如果脚本成功运行,返回值输出将设置为True,如果有错误,则设置为False。
结论
恭喜您!现在,您已经为创建令人惊叹的编辑器实用工具蓝图奠定了基础,可以根据自己的喜好修改编辑器的界面,运行启动脚本,甚至可以将Python与蓝图一起使用。
欢迎在评论区对本教程提出问题或提供反馈!
近期焦点
Epic全新一站式内容商城Fab今日上线!
Epic for Indies现已登陆Epic开发者社区
虚幻引擎里你可能不知道的功能 | UnrealFest演讲精粹
使用简单的通用材质来提高UI性能 | UnrealFest演讲精粹
为手机优化生存游戏 | UnrealFest演讲精粹

扫描下方二维码,关注后点击菜单栏按钮“更多内容”并选择“联系我们”获得更多虚幻引擎的授权合作方式和技术支持

长按屏幕选择“识别二维码”关注虚幻引擎

“虚幻引擎”微信公众账号是Epic Games旗下Unreal Engine的中文官方微信频道,在这里我们与大家一起分享关于虚幻引擎的开发经验与最新活动。

虚幻引擎
Epic Games 旗下 Unreal Engine 虚幻引擎官方订阅号
 最新文章