1、烘焙所有关卡和资源
编辑器菜单[Cook Content for Windows]可以烘焙所有关卡和资源
2、烘焙指定关卡
烘焙指定关卡可以用命令行实现,其中要加入-map参数,如-map=/Game/NewMap就会只烘焙NewMap关卡
官方文档提供的命令行格式如下:
UE4Editor.exe <GameName or uproject> -run=cook -targetplatform=<Plat1>+<Plat2> [-cookonthefly] [-iterate] [-map=<Map1>+<Map2>]
或
UE4Editor-Cmd.exe <GameName> -run=cook -targetplatform=<Plat1>+<Plat2> [-cookonthefly] [-iterate] [-map=<Map1>+<Map2>]
各参数含义
也可以简单仿照FMainFrameActionCallbacks::CookContent函数创建一个批处理任务,例如
3、烘焙指定资源
上面的烘焙是以关卡为单位,不能烘焙单独的资源
要烘焙指定的资源可以查看CookOnTheFlyServer.cpp文件中的UCookOnTheFlyServer::SaveCookedPackage函数
以下是一个简单的实现,InPackage传入资源包(可以通过GetOutermost获取,也可以是CreatePackage创建的),InSavePath是烘焙输出文件,后缀名为.uasset
编辑器菜单[Cook Content for Windows]可以烘焙所有关卡和资源
2、烘焙指定关卡
烘焙指定关卡可以用命令行实现,其中要加入-map参数,如-map=/Game/NewMap就会只烘焙NewMap关卡
官方文档提供的命令行格式如下:
UE4Editor.exe <GameName or uproject> -run=cook -targetplatform=<Plat1>+<Plat2> [-cookonthefly] [-iterate] [-map=<Map1>+<Map2>]
或
UE4Editor-Cmd.exe <GameName> -run=cook -targetplatform=<Plat1>+<Plat2> [-cookonthefly] [-iterate] [-map=<Map1>+<Map2>]
各参数含义
也可以简单仿照FMainFrameActionCallbacks::CookContent函数创建一个批处理任务,例如
void CookMap(const FString& InMap)
{FString ProjectPath = FPaths::IsProjectFilePathSet() ? FPaths::ConvertRelativePathToFull(FPaths::GetProjectFilePath()) : FPaths::RootDir() / FApp::GetProjectName() / FApp::GetProjectName() + TEXT(".uproject");FString CommandLine = FString::Printf(TEXT("BuildCookRun %s%s -nop4 -project=\"%s\" -cook -skipstage -map=%s -ue4exe=%s -utf8output"),TEXT("-nocompile -nocompileeditor"),FApp::IsEngineInstalled() ? TEXT(" -installed") : TEXT(""),*ProjectPath,*InMap,*FUnrealEdMisc::Get().GetExecutableForCommandlets());IUATHelperModule::Get().CreateUatTask(CommandLine, FText::FromString(TEXT("Windows")), FText::FromString("Cooking content"), FText::FromString("Cooking"), FEditorStyle::GetBrush(TEXT("MainFrame.CookContent")));
}
3、烘焙指定资源
上面的烘焙是以关卡为单位,不能烘焙单独的资源
要烘焙指定的资源可以查看CookOnTheFlyServer.cpp文件中的UCookOnTheFlyServer::SaveCookedPackage函数
以下是一个简单的实现,InPackage传入资源包(可以通过GetOutermost获取,也可以是CreatePackage创建的),InSavePath是烘焙输出文件,后缀名为.uasset
bool SaveToCookAsset(UPackage * InPackage, const FString & InSavePath)
{ITargetPlatformManagerModule& TPM = GetTargetPlatformManagerRef();const TArray<ITargetPlatform*>& TargetPlatforms = TPM.GetTargetPlatforms();ITargetPlatform* Target = nullptr;for (ITargetPlatform *TargetPlatform : TargetPlatforms){if (TargetPlatform->PlatformName() == "WindowsNoEditor"){Target = TargetPlatform;break;}}InPackage->SetPackageFlags(PKG_FilterEditorOnly);uint32 saveFlags = SAVE_KeepGUID | SAVE_Async | SAVE_Unversioned;FSavePackageResultStruct Result = GEditor->Save(InPackage, nullptr, RF_Public, *InSavePath, GError, NULL, false, false, saveFlags, Target, FDateTime::MinValue(), false);return Result == ESavePackageResult::Success;
}