ue4挂载其他工程生成的pak,打开level

1.pak的MountPoint的计算

UE4在创建pak文件时会对MountPoint进行计算,用一句话来概括计算逻辑就是:UE4会收集所有打包到pak中的文件,然后提取它们目录的公共部分作为MountPoint

 

下面以一个例子来说明。假设我们有3个文件需要打包到pak中,它们的路径分别为"../../../MyProject/Content/A.uasset"、"../../../MyProject/B.uasset"以及"../../../C.uasset"。

  1. 计算开始时,首先获取最长的路径,为"../../../MyProject/Content/"
  2. 接着开始遍历每个文件
  3. 遍历到"../../../MyProject/B.uasset"时,其路径为"../../../MyProject/“,并不包含"../../../MyProject/Content/",因此公共路径变为"../../../MyProject/“
  4. 同理,当遍历到"../../../C.uasset"时,公共路径变为"../../../"
  5. 此时所有文件处理完毕,MountPoint就是"../../../",会被写入pak文件中

2.FPackageName::RegisterMountPoint

根据上面的算法,不同project的pak,uasset的路径都会带上"MyProject/Content/"和"MyProject2/Content/"这样的路径。

加载的时候,需要增加一个全局的MountPoint来替换这个加载路径

3.获取生成pak的Project Name

 根据pak的生成规则,需要获取到pak工程对应的Project Name

这里使用"/Mod/"来作为pak的RootPath.

4.加载pak并设置MountPoint

    //搜索pak文件
    TArray<FString> Result;
	IFileManager::Get().FindFiles(Result, *Dir, TEXT("*.pak"));

	FPakPlatformFile* PakFileMgr = (FPakPlatformFile*)FPlatformFileManager::Get().GetPlatformFile(FPakPlatformFile::GetTypeName());

	for (auto& Pair : Result)
	{
		auto FilePath = Dir + Pair;
		UE_LOG(LogTemp, Warning, TEXT("PreLoadMod %s"), *FilePath);
		
		FPakFile* Pak = new FPakFile(&PlatformFile, *FilePath, false);
		if (Pak->IsValid())
		{
			FString MountPoint(*Pak->GetMountPoint()); //获取Pak上的挂载点
			UE_LOG(LogTemp, Warning, TEXT("GetMountPoint %s"), *MountPoint);
			
            //从pak文件名中获取打包的ProjectName
			FString Left, Right;
			FPaths::GetBaseFilename(FilePath).Split(TEXT("-"), &Left, &Right);

			MountPoint.ReplaceInline(TEXT("../../../"), *FPaths::ProjectDir());
			Pak->SetMountPoint(*MountPoint);

            //设置pak的全局搜索路径
			FPackageName::RegisterMountPoint("/Mod/", Pak->GetMountPoint()+ Left + TEXT("/Content/"));

			if (PakFileMgr->Mount(*(Dir + Pair), 0, *Pak->GetMountPoint()))
			{
				//带上/Mod/作为搜索路径,避免默认从/Game/中搜索
                UGameplayStatics::OpenLevel(GetWorld(),FName(TEXT("/Mod/Test")));
			}
		}

 

 

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 要解包UE4游戏以便使用UE4打开,您需要使用UE4引擎自带的工具UnrealPak。UnrealPakUE4引擎中的一个命令行工具,用于解析和打包UE4游戏的资源文件。 要使用UnrealPak工具解包UE4游戏,您首先需要打开命令提示符或终端窗口,并导航到UE4引擎的安装目录下的“Engine/Binaries/Win64”文件夹(如果您正在使用Windows操作系统)。然后,您可以运行以下命令来解包UE4游戏: UnrealPak -Extract <游戏资源文件路径> <解包路径> 其中,<游戏资源文件路径>是UE4游戏的资源文件路径,一般为".pak"文件。而<解包路径>是您希望将解包后的文件保存的位置。 运行上述命令后,UnrealPak将解包UE4游戏的资源文件,并将解包后的文件保存到您指定的路径下。解包后的文件包括游戏的模型、纹理、材质、声音等资源,您可以在UE4编辑器中使用这些资源来进行修改和编辑。 需要注意的是,解包UE4游戏的资源文件可能需要获取相关的许可或授权,以免侵犯游戏开发者的知识产权。因此,在进行任何解包操作之前,请确保您有相关的授权或许可证,以遵守法律法规和游戏开发者的规定。 ### 回答2: 要解包UE4游戏以便用UE4打开,需要使用UE4提供的专用工具,称为“UnrealPak”。 UnrealPak是一种命令行工具,可用于将游戏资源从游戏文件(通常是pak文件)中提取出来,以便能够在UE4编辑器中进行进一步的编辑和修改。 要使用UnrealPak工具解包UE4游戏,首先需要打开命令提示符或终端,并导航到Unreal Engine安装目录的“Engine/Binaries/Win64”文件夹。 然后,您可以使用以下命令来运行UnrealPak: UnrealPak -Extract <game_file_path> <destination_path> 其中,<game_file_path>是游戏文件的路径和文件名,而<destination_path>是要提取资源的目标路径。 运行此命令后,UnrealPak将解包游戏文件,并将提取的资源保存到指定的目的地路径中。 解包后,您可以使用UE4编辑器打开这些提取出来的资源,并进行修改、编辑或重新打包成新的游戏文件。 这样,您就能够使用UE4编辑器的强大功能来进一步开发、调试和优化该游戏。 总之,要解包UE4游戏以便用UE4打开,您需要使用UE4提供的UnrealPak工具。该工具能够将游戏资源从游戏文件中提取出来,以便在UE4编辑器中进行进一步的编辑和修改。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值