Unreal Engine C++ Create Blueprint And Save Package

Unreal Engine C++ Create Blueprint And Save Package

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
喜欢就支持一下吧
点赞9 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容