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);