UE4 – 使用C ++控制编辑器小部件(4.22)

Posted on

原文: https://isaratech.com/ue4-controlling-editor-widgets-with-c-4-22/ (英文)
译者:李华宾

上一篇文章(UE4 – 使用C ++扩展编辑器小工具)

在前面的文章中,我们已经看到了如何使用蓝图定义编辑器小工具以及如何从C ++定义编辑器小工具。但是,虽然我们已经看到了创建这些小工具的基础知识,但我们还没有研究如何使用C ++构建小工具,即定义要显示的控件并编写背后的逻辑。本教程将展示该如何完成这件事,不过是使用C++来完成。

首先,我们将首先创建一个在插件中扩展EditorUtilityWidget的类(前一个教程描述了执行此操作的步骤)。
一旦完成,我们就可以从C ++构建小工具了。

定义类属性和函数

在这个例子中,我们将在C ++中创建一个包含一个按钮的Editor Widget:当单击时,将在屏幕上打印一条消息。

因此,首先我们将创建一个属性来包含要在屏幕上显示的消息,如下所示:

UPROPERTY(EditAnywhere, BlueprintReadWrite)
FText Message;

我们将此属性设置为可编辑,因此可以在窗口小工具UMG蓝图中进行编辑,这将扩展此类。

以及在屏幕上打印消息的功能:

UFUNCTION(BlueprintCallable)
void PrintText();

定义如下:


void UMyEditorWidgetClass::PrintText()
{
	DEBUG_TEXT(*this->Message.ToString())
}

附上一个用来定义打印的宏:


#define DEBUG_TEXT(x, ...) if(GEngine){GEngine->AddOnScreenDebugMessage(-1, 15.0f, FColor::Red, FString::Printf(x, __VA_ARGS__));}

定义窗体控件

我们想要创建一个按钮,单击该按钮将调用PrintText()函数。要编辑窗口小工具的控件,我们将覆盖NativePreConstruct()方法,我们将在那里构建窗口小工具。它也可以通过覆盖NativeConstruct来工作,但这样我们就可以使用窗口小工具蓝图预览窗口小工具。构造规则与使用C ++编写的任何UMG小部件相同,因此如果您熟悉C ++ UMG小部件,则没有什么新东西。这就是它的样子:


void UMyEditorWidgetClass::NativePreConstruct()
{
	Super::NativePreConstruct();

	// The default root widget is a canvas panel
	UWidget* RootWidget = GetRootWidget();
	UCanvasPanel* CanvasPanel = static_cast(RootWidget);

	// Here we create a text block
	UTextBlock* TextBlock = NewObject();
	TextBlock->SetText(FText::FromString("Hello World"));

	// Then a button which contains the text block
	UButton* Button = NewObject();
	Button->SetContent(TextBlock);
	Button->OnClicked.AddDynamic(this, &UMyEditorWidgetClass::PrintText);

	CanvasPanel->AddChildToCanvas(Button);
}

没有任何关于样式,设置文本大小或其他任何东西,所以它将是丑陋的,但至少它显示出了最基础的东西。

测试

现在,一切都写完了,我们可以测试一下它是如何工作的。因此,我们需要创建一个扩展此类的Editor Widget Blueprint。

一旦完成,在蓝图Graph中,我们将拥有它(将C ++类设置为父类):

如果我们在Designer视图之后打开,我们将拥有:

我们现在可以右键单击资产,然后单击Run Editor Utility Widget。然后将显示小部件。它看起来像是之前文章中使用了蓝图定义的那个,只不过这个是完全用C ++定义的。

结束

在本教程中,我们已经了解了如何使用C ++定义Editor Widget Blueprint。显然,如果我们不需要使用C ++函数,通常最好使用蓝图编辑器来创建所有内容,但有时我们没有选择(例如,如果我们想在编辑器小部件中调用系统函数,或根据外部库的结果来构建它。在4.22之前,有可能使用C ++定义编辑器小部件。但是4.22的优点是,现在,我们可以用C ++创建这个编辑器小部件,并使用UMG设计器和蓝图图编辑器扩展它们。它使我们能够受益于C ++的强大功能和UMG设计的可用性。

本文总结了(暂时)关于4.22 Editor Widgets的短篇文章。但是如果您对更多关于此的文章感兴趣,或者您想要请求关于特定主题的文章,您可以关注我们并在TwitterFacebook 与我们联系。

One Reply to “UE4 – 使用C ++控制编辑器小部件(4.22)”

发表评论

电子邮件地址不会被公开。 必填项已用*标注