内容纲要
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