内容纲要

UE的C++中,创建EditorUtilityWidget的方法

声明引用

// Editor Utility Widget类
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite)
TSoftClassPtr<UEditorUtilityWidget> EditorUtilityWidgetClass;

然后在蓝图中,把对应的EditorUtilityWidget类拖到对象上

加载

UE_LOG(LogTemp, Error, TEXT("ToString: %s"), *EditorUtilityWidgetClass.ToSoftObjectPath().ToString());
UE_LOG(LogTemp, Error, TEXT("AssetName: %s"), *EditorUtilityWidgetClass.GetAssetName());
UE_LOG(LogTemp, Error, TEXT("GetLongPackageName: %s"), *EditorUtilityWidgetClass.GetLongPackageName());

上述的输出如下:

[0187.59][358]LogTemp: Error: ToString: /Game/Editor/CmdLine/EdBp_CmdPanel.EdBp_CmdPanel_C
[0187.59][358]LogTemp: Error: AssetName: EdBp_CmdPanel_C
[0187.59][358]LogTemp: Error: GetLongPackageName: /Game/Editor/CmdLine/EdBp_CmdPanel

可以看到,GetLongPackageName是我们可以用于加载的路径

根据GetLongPackageName加载

参考来源:https://gist.github.com/FilipSivak/c03f724a34da59a9463eba7248868047

UObject * Blueprint = UEditorAssetLibrary::LoadAsset(MenuPtr->EditorUtilityWidgetClass.GetLongPackageName());
if(IsValid(Blueprint)) {
UEditorUtilityWidgetBlueprint* EditorWidget = Cast<UEditorUtilityWidgetBlueprint>(Blueprint);
if (IsValid(EditorWidget))
{
UEditorUtilitySubsystem* EditorUtilitySubsystem = GEditor->GetEditorSubsystem<UEditorUtilitySubsystem>();
EditorUtilitySubsystem->SpawnAndRegisterTab(EditorWidget);
}
}

上述代码即可打开EditorUtilityWidget蓝图作为一个独立的窗口界面。

验证环境:UE 5.3

最后修改日期: 2024年4月29日

作者