Function
static UBlueprint* CreateBlueprint(FText InWindowTitle, UClass* InParentClass, EBlueprintType BlueprintType = BPTYPE_Normal, FString NewNameSuggestion = L"");
UBlueprint* UDreamGameplayTaskTools::CreateBlueprint(FText InWindowTitle, UClass* InParentClass,EBlueprintType BlueprintType, FString NewNameSuggestion)
{
check(FKismetEditorUtilities::CanCreateBlueprintOfClass(InParentClass));
// Pre-generate a unique asset name to fill out the path picker dialog with.
if (NewNameSuggestion.Len() == 0)
{
NewNameSuggestion = TEXT("NewBlueprint");
}
UClass* BlueprintClass = nullptr;
UClass* BlueprintGeneratedClass = nullptr;
IKismetCompilerInterface& KismetCompilerModule = FModuleManager::LoadModuleChecked<IKismetCompilerInterface>("KismetCompiler");
KismetCompilerModule.GetBlueprintTypesForClass(InParentClass, BlueprintClass, BlueprintGeneratedClass);
FString PackageName = FString(TEXT("/Game/Blueprints/")) + NewNameSuggestion;
FString Name;
FAssetToolsModule& AssetToolsModule = FModuleManager::LoadModuleChecked<FAssetToolsModule>("AssetTools");
AssetToolsModule.Get().CreateUniqueAssetName(PackageName, TEXT(""), PackageName, Name);
if (GetDefault<UDreamGameplayTaskSetting>()->bEnableTheCreateSelector)
{
TSharedPtr<SDlgPickAssetPath> PickAssetPathWidget =
SNew(SDlgPickAssetPath)
.Title(InWindowTitle)
.DefaultAssetPath(FText::FromString(PackageName));
if (EAppReturnType::Ok == PickAssetPathWidget->ShowModal())
{
// Get the full name of where we want to create the physics asset.
FString UserPackageName = PickAssetPathWidget->GetFullAssetPath().ToString();
FName BPName(*FPackageName::GetLongPackageAssetName(UserPackageName));
// Check if the user inputed a valid asset name, if they did not, give it the generated default name
if (BPName == NAME_None)
{
// Use the defaults that were already generated.
UserPackageName = PackageName;
BPName = *Name;
}
// Then find/create it.
UPackage* Package = CreatePackage( *UserPackageName);
check(Package);
// Create and init a new Blueprint
UBlueprint* Blueprint = FKismetEditorUtilities::CreateBlueprint(InParentClass, Package, BPName, BlueprintType, BlueprintClass, BlueprintGeneratedClass, FName("LevelEditorActions"));
if (Blueprint)
{
// Notify the asset registry
FAssetRegistryModule::AssetCreated(Blueprint);
// Mark the package dirty...
Package->MarkPackageDirty();
DGT_ED_LOG(Log, TEXT("Create Blueprint %s"), *PackageName);
return Blueprint;
}
}
}
else // 如果bEnableTheCreateSelector为false
{
FDreamGameplayTaskEditorModule& Module = FModuleManager::LoadModuleChecked<FDreamGameplayTaskEditorModule>("DreamGameplayTaskEditor");
PackageName = Module.CurrentContentBrowserPath.Right(Module.CurrentContentBrowserPath.Len() - 4) + "/" + NewNameSuggestion;
AssetToolsModule.Get().CreateUniqueAssetName(PackageName, TEXT(""), PackageName, Name);
// Get the full name of where we want to create the physics asset.
FString UserPackageName = PackageName;
FName BPName(*FPackageName::GetLongPackageAssetName(UserPackageName));
// Check if the user inputed a valid asset name, if they did not, give it the generated default name
if (BPName == NAME_None)
{
// Use the defaults that were already generated.
UserPackageName = PackageName;
BPName = *Name;
}
// Then find/create it.
UPackage* Package = CreatePackage( *UserPackageName);
check(Package);
// Create and init a new Blueprint
UBlueprint* Blueprint = FKismetEditorUtilities::CreateBlueprint(InParentClass, Package, BPName, BlueprintType, BlueprintClass, BlueprintGeneratedClass, FName("LevelEditorActions"));
if (Blueprint)
{
// Notify the asset registry
FAssetRegistryModule::AssetCreated(Blueprint);
// Mark the package dirty...
Package->MarkPackageDirty();
DGT_ED_LOG(Log, TEXT("Create Blueprint %s"), *PackageName);
return Blueprint;
}
}
return nullptr;
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容