【虚幻引擎】UE4/UE5 pak挂载

18 篇文章 18 订阅
8 篇文章 7 订阅

B站教学链接:https://space.bilibili.com/449549424?spm_id_from=333.1007.0.0


一、首先设置UE4引擎的系统环境变量

 找到:D:\UE\UE_4.27\Engine\Binaries\Win64,

 WindowS+R打开CMD命令

运行UnrealPak,运行结果如下

 二、打开虚幻引擎,Cook资源

     注意如果想要加载Pak内资源,那么这些资源必须是经过Cook的。如果打包的是未Cook的资源,那么即使Pak挂载成功,也不可能会成功加载Pak内资源。

 Cook好之后,存储的路径在你的I:\DBJTest\Saved\Cooked\WindowsNoEditor\DBJTest\Content\DLC

 使用命令开始打包

第一种:打包单个文件夹,此处的文件夹为DLC

打包Pak的命令行格式

UnrealPak “存储Pak的路径+Pak包名” -create="Cook好的资源的路径"

成功之后会出现文件DLCtest.pak

第二种:打包整个Content文件

unrealpak "I:\DLCtest.pak" -create=I:\DBJTest\Saved\Cooked\WindowsNoEditor\DBJTest\Content

第三种:打包单个文件

unrealpak "I:\DLCtest.pak" -create=I:\DBJTest\Saved\Cooked\WindowsNoEditor\DBJTest\Content\DLC\download.uasset

打包完成后就能在你对应的文件夹中找到相对应的文件

三、挂载Pak包

 1.自动挂载

如果手动将Pak放在以下这些项目路径中,引擎将会自动加载Pak

  • [ProjectName]/Content/Paks
  • [ProjectName]/Saved/Paks
  • Engine/Content/Paks

 2.手动挂载

在Bulid.cs里面加入模块PakFile


public class DBJTest : ModuleRules
{
	public DBJTest(ReadOnlyTargetRules Target) : base(Target)
	{
		PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;

		PublicDependencyModuleNames.AddRange
        (
            new string[] 
            {
                "Core",
                "CoreUObject",
                "Engine",
                "InputCore",
                "HeadMountedDisplay",
                "PakFile",
            }
        );
	}
}

MyPlayerController.h文件

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/PlayerController.h"
#include "MyPlayerController.generated.h"

/**
 * 
 */
UCLASS()
class DBJTEST_API AMyPlayerController : public APlayerController
{
	GENERATED_BODY()
	
public:
	virtual void BeginPlay() override;

	UFUNCTION(Exec)
		void TestLoadPak(FString InPakFullPath);
	
	TSharedPtr<class FPakPlatformFile> PakPlatform;
	class IPlatformFile* OldPlatform;
};

MyPlayerController.cpp文件

// Fill out your copyright notice in the Description page of Project Settings.

#include "MyPlayerController.h"
#include "IPlatformFilePak.h"
#include "PlatformFilemanager.h"
#include "Runtime/Engine/Classes/Engine/StaticMeshActor.h"
#include "GenericPlatformFile.h"

void AMyPlayerController::BeginPlay()
{
	Super::BeginPlay();

	OldPlatform = &FPlatformFileManager::Get().GetPlatformFile();
	PakPlatform = MakeShareable(new FPakPlatformFile());
	PakPlatform->Initialize(&FPlatformFileManager::Get().GetPlatformFile(), TEXT(""));
}

void AMyPlayerController::TestLoadPak(FString InPakFullPath)
{
	FPlatformFileManager::Get().SetPlatformFile(*PakPlatform.Get());

	FString PakFileFullPath = InPakFullPath;

	FPakFile* TmpPak = new FPakFile(PakPlatform.Get(), *PakFileFullPath, false);
	FString PakMountPoint = TmpPak->GetMountPoint();
	int32 Pos = PakMountPoint.Find("Content/");
	FString NewMountPoint = PakMountPoint.RightChop(Pos);
	NewMountPoint = FPaths::ProjectDir() + NewMountPoint;
	//FString NewMountPoint = "../../../DBJTest/Content/DLC/";

	TmpPak->SetMountPoint(*NewMountPoint);

	if (PakPlatform->Mount(*PakFileFullPath, 1, *NewMountPoint))
	{
		TArray<FString> FoundFilenames;
		TmpPak->FindFilesAtPath(FoundFilenames, *TmpPak->GetMountPoint(), true, false, false);

		if (FoundFilenames.Num() > 0)
		{
			for (FString& Filename : FoundFilenames)
			{
				if (Filename.EndsWith(TEXT(".uasset")))
				{
					FString NewFileName = Filename;
					NewFileName.RemoveFromEnd(TEXT(".uasset"));
					int32 Pos = NewFileName.Find("/Content/");
					NewFileName = NewFileName.RightChop(Pos + 8);
					NewFileName = "/Game" + NewFileName;

					UObject* LoadedObj = StaticLoadObject(UObject::StaticClass(), NULL, *NewFileName);

					UStaticMesh* SM = Cast<UStaticMesh>(LoadedObj);
					if (SM)
					{
						AStaticMeshActor* MeshActor = GetWorld()->SpawnActor<AStaticMeshActor>(AStaticMeshActor::StaticClass(), FVector(0,0,460), FRotator(0,0,0) );
						MeshActor->SetMobility(EComponentMobility::Movable);
						MeshActor->GetStaticMeshComponent()->SetStaticMesh(SM);
						break;
					}
				}
			}
		}
	}


	FPlatformFileManager::Get().SetPlatformFile(*OldPlatform);

}

世界设置要选择GameMode

 运行Play,按下~按键,输入命令testLoadPak I:\DLCtest.pak

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: UE5 Pak虚幻引擎5(Unreal Engine 5)中的一种打包文件格式和工具。Pak 文件是一种将游戏资源文件打包成一个单独文件的方式,可以方便地进行资源管理和发布。 UE5 Pak 学习与应用可以分为两个方面:学习和应用。 首先是学习,学习使用 UE5 Pak 可以通过官方文档、教程和示例来进行。官方文档中提供了关于 Pak 文件的详细说明、打包工具的使用方法以及常见问题的解答。教程和示例项目则可以让开发者更直观地理解和掌握打包资源文件的流程和技巧。此外,还可以参加相关的培训课程和研讨会,与其他开发者进行经验交流和学习。 其次是应用,UE5 Pak 在游戏开发中有着广泛的应用。使用 Pak 文件可以将游戏所需的资源文件打包成一个单独的文件,提高了游戏的独立性和可移植性。同时,Pak 文件可以进行加密和压缩,保护游戏资源的安全性和减小游戏文件的大小。在游戏发布过程中,可以通过将 Pak 文件分发给玩家来提供游戏内容,或者通过在线更新方式更新游戏内容。此外,UE5 Pak 还支持游戏内加载和解包资源文件,使开发者可以在游戏运行时动态加载和使用资源文件,提供更灵活的游戏体验。 总之,学习和应用 UE5 Pak 可以帮助开发者更好地管理和发布游戏资源文件,提高游戏的独立性、可移植性和安全性,同时也为玩家提供了更好的游戏体验。 ### 回答2: UE5(Unreal Engine 5)是由Epic Games公司开发的一款强大的游戏引擎,它具有广泛的应用和学习价值。 首先,UE5具备强大的实时渲染功能,可以创建出逼真的游戏画面,使得游戏世界更加真实和沉浸。这对于游戏开发者和学习者来说都是一个巨大的优势,可以通过UE5来制作高质量的游戏作品,并且可以学习到世界级水平的渲染技术。 其次,UE5提供了丰富的蓝图系统,这是一种可视化的编程方式,使得非程序员也可以快速制作出功能丰富的游戏。这对于初学者来说非常友好,可以通过UE5学习到游戏开发的基本原理和逻辑。 此外,UE5还支持多平台开发,包括PC、主机、移动设备等。这意味着通过学习UE5,可以用同一套代码来开发不同平台的游戏,提高开发效率。 除了游戏开发,UE5还可以应用于虚拟现实(VR)、增强现实(AR)、建筑可视化、电影制作等领域。通过学习UE5,可以掌握这些前沿技术,为未来的就业和创业提供更多机会。 总之,UE5作为一款先进的游戏引擎,具备强大的渲染能力、丰富的蓝图系统和多平台支持,对于游戏开发者和学习者来说,具有巨大的学习和应用价值。无论是想要制作游戏还是学习相关领域的知识,UE5都是一个理想的选择。 ### 回答3: UE5(Unreal Engine 5)是由Epic Games开发的一款游戏引擎。作为游戏开发者,学习和应用UE5可以带来许多好处。 首先,学习和应用UE5可以提供一个强大的游戏开发平台。UE5拥有强大的图形和物理系统,能够创建出逼真的游戏画面和真实的物理效果。它还提供了强大的动画、人工智能、网络和音频系统,可以帮助游戏开发者实现各种复杂的游戏功能。 其次,UE5拥有用户友好的编辑器和脚本系统。通过学习UE5的编辑器,开发者可以快速创建和调整游戏场景、角色、特效等。而UE5的脚本系统蓝图可以让开发者使用图形化界面进行编程,不需要深入学习复杂的编程语言,也能实现各种游戏逻辑和功能。 此外,UE5也提供了丰富的教程和资源。Epic Games官方提供了大量的教程视频和文档,覆盖了UE5的各个方面,包括基础知识、高级技巧和实例应用等。同时,UE5庞大的社区也为学习者提供了很多交流和分享的机会,可以互相学习和解决问题。 最后,UE5是一款广泛应用的游戏引擎。学习和应用UE5可以帮助开发者更容易地与其他开发者合作,分享资源和经验,增加自己的职业机会和发展空间。同时,UE5也被广泛应用于游戏开发、虚拟现实、增强现实等领域,学习和应用UE5也可以为开发者提供更多的工作机会和项目经验。 综上所述,学习和应用UE5对于游戏开发者来说是非常有价值的。它提供了强大的游戏开发平台和工具,拥有丰富的学习资源和社区支持,可以帮助开发者实现更多的游戏创意和潜力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞起的猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值