在Unreal Engine 5 (UE5) 中,如果你想要创建一个可以选择多个类的界面,你可以使用SClassPicker小部件。以下是一个简单的例子,展示如何在UE5的编辑器模块中创建一个自定义的编辑器工具栏按钮,并打开一个类选择器。
#include "ToolExampleEditor/Public/ToolExampleEditorModule.h"
#include "ToolExampleEditor/Public/ToolExampleEditorToolbar.h"
#include "EditorStyleSet.h"
#include "SClassPicker.h"
#include "IDetailsView.h"
#include "PropertyEditorModule.h"
#include "IDetailChildrenBuilder.h"
#include "DetailWidgetRow.h"
#include "DetailCategoryBuilder.h"
void FToolExampleEditorModule::AddToolbarExtension(FToolBarBuilder& Builder)
{
Builder.AddToolBarButton(
FUIAction(
FExecuteAction::CreateRaw(this, &FToolExampleEditorModule::OnOpenClassPickerClicked),
FCanExecuteAction()
),
NAME_None,
TAttribute<FText>(),
TAttribute<FText>(),
FSlateIcon(FEditorStyle::GetStyleSetName(), "ClassThumbnail.ClassIcon")
);
}
void FToolExampleEditorModule::OnOpenClassPickerClicked()
{
FSClassViewerInitializationOptions InitOptions;
InitOptions.bShowNoneOption = true;
InitOptions.bShowEngineClasses = true;
InitOptions.bShowStableClasses = true;
InitOptions.bShowUnstableClasses = true;
// 打开类选择器并处理结果
FClassViewerModule& ClassViewerModule = FModuleManager::LoadModuleChecked<FClassViewerModule>("ClassViewer");
UClass* ChosenClass = ClassViewerModule.CreateClassViewer(InitOptions, TExtensibility::Get(), TSharedPtr<FClassViewerFilter>())->ShowClassViewer(
TEXT("Select Class"),
TEXT("Select a class"),
UObject::StaticClass()
);
if (ChosenClass != nullptr)
{
// 使用选择的类
FFormatNamedArguments Arguments;
Arguments.Add(TEXT("ClassName"), FText::FromString(ChosenClass->GetName()));
FMessageDialog::Open(EAppMsgType::Ok, FText::Format(LOCTEXT("ClassSelected", "Class {ClassName} selected."), Arguments));
}
}
这段代码演示了如何在UE5编辑器模块中添加一个工具栏按钮,并在按钮点击事件中打开一个类选择器。当用户选择一个类后,会弹出一个消息框显示选择的类名。这个例子简单明了,并且提供了一个如何在UE5编辑器中集成类选择界面的实践方法。