UE4 C++(21):Cook单个资源

本文介绍了如何在UE4中使用C++进行单个资源的Cook操作,包括通过控制台命令执行、获取烘培路径、调用CookPackage函数以及烘培结果的显示。还提到了注意事项,如引用库文件和改写Build.cs,以及补充内容,如烘培整个项目和地图的烘培方法。总结指出该方法仅适用于Editor运行时。
摘要由CSDN通过智能技术生成

03/14/2020

Cook 单个资源

HotPatcher有一个函数叫做OnCookPlatform函数,需要资源名字和烘培平台就可以烘培资源了。简单把这个函数提取出来,我这边使用的是控制台来烘焙鼠标选中Content面板中的资源。

控制台烘培选中资源

控制台命令

传递烘培资源的平台,然后创建烘培的路径和开始烘培,最后完成烘培结果的显示。

  • GetCookedAssetDir():获取烘培路径
  • CookPackage():烘培函数,即生成文件
  • CreateSaveFileNotify():完成烘培结果显示
// Cheat command to load all assets of a given type
static FAutoConsoleCommand CookChoosedAssets(
	TEXT("CookChoosedAssets"),
	TEXT("Cook Choosed Assets in the Content Broweser"),
	FConsoleCommandWithArgsDelegate::CreateStatic(
		[](const TArray<FString>& Platforms)
		{
   
			//Cook A single asset

			//1. Get Asset Path + Name  on the ContentBrowser
			FContentBrowserModule& ContentBrowserModule = FModuleManager::Get().LoadModuleChecked<FContentBrowserModule>(TEXT("ContentBrowser"));
			TArray<FAssetData> AssetsData;
			ContentBrowserModule.Get().GetSelectedAssets(AssetsData);

			if (AssetsData.Num() == 0)
			{
   
				UE_LOG(LogTemp, Warning, TEXT("Plase Choose assets"));
				return;
			}

			TArray<UPackage*> AssetsPackage;
			for (const auto& AssetData : AssetsData)
			{
   
				AssetsPackage.AddUnique(AssetData.GetPackage());
			}

			for (auto CurrentPlatform : Platforms)
			{
   
				//Create folder and Cook assets
				FString CookedDir = FPaths::ConvertRelativePathToFull(FPaths::Combine(FPaths::ProjectSavedDir(), TEXT("Cooked")));
				for (const auto& AssetPacakge : AssetsPackage)
				{
   
					FString CookedSavePath = GetCookAssetsSaveDir(CookedDir, AssetPacakge, CurrentPlatform);

					//Start Cook Assets
					bool bCookStatus = CookPackage(AssetPacakge, Platforms, CookedDir);

					auto Msg = FText::Format(
						LOCTEXT("CookAssetsNotify", "Cook Platform {1} for {0} {2}!"),
						UKismetTextLibrary::Conv_StringToText(AssetPacakge->FileName.ToString()),
						UKismetTextLibrary::Conv_StringToText(CurrentPlatform),
						bCookStatus ? UKismetTextLibrary::Conv_StringToText(TEXT("Successfuly")) : UKismetTextLibrary::Conv_StringToText(TEXT("Faild"))
					);
					SNotificationItem::ECompletionState CookStatus = bCookStatus ? SNotificationItem::ECompletionState::CS_Success : SNotificationItem::ECompletionState::CS_Fail;
					CreateSaveFileNotify(Msg, CookedSavePath, CookStatus);
					UE_LOG(LogTemp, Warning, TEXT("Cook Single Assets, %s"), bCookStatus?TEXT("True"):TEXT("False"));

				}
			}
			UE_LOG(LogTemp, Warning, TEXT("Finish Cook Single Assets"));
		}), ECVF_Default);
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值