UE挂载Pak的调研心得

 前段时间,由于工作需要,研究了一下如何挂载Pak以及在热更应用中的思考,包括新增的Pak和替换旧Pak。在查阅大量资料和亲手实践后,在此做个总结记录。

前置知识

Pak的概念、制作、挂载等前置知识,可以查看下列参考文档:

聊一聊UE4中的pak - 弘竣的文章 - 知乎

Pak文件的优先级

  1. 挂载的顺序并不是查找的顺序,每当有新文件挂载时,内部的pak列表会根据优先级来排序。优先级大的排在前面,优先被查找。
  2. 优先级规则

        i.规则1:基于文件路径

                "[ProjectName]/Content/Paks/[ProjectName]-XXX"的pak文件优先级为4

                "[ProjectName]/Content/Paks" 目录下除上述pak文件的优先级为3

                "Engine/Content/Paks"目录优先级为2

                "[ProjectName]/Saved/Paks" 目录优先级为1

                其余为0

        ii.规则2:基于文件名

                文件名以"_P.pak"结尾的Pak享有额外的优先级,最低为100。

                “_n_P.pak”结尾的优先级 =(n+1)*100+规则1 的优先级

        iii.规则3:手动挂载Pak时可以指定优先级

挂载Pak

  • 挂载,只是读取pak中的文件列表信息。加载时会按照Pak优先级去查找文件。

注意:要在挂载完所需Pak之后,再加载所需资源。例如:pak1.pak里有一个蓝图Actor,pak2.pak里是稍作修改的Actor。如果挂载pak1.pak,加载Actor,再挂载pak2.pak,再加载Actor,这种顺序就只能加载到pak1中的Actor

  • 引擎会自动从以下三个目录挂载Pak:

        [ProjectName]/Content/Paks

        [ProjectName]/Saved/Paks

        Engine/Content/Paks

1.挂载新增的Pak

方法1:将Pak放到引擎自动挂载的目录下(若开启IO,需要包含.pak/.utoc/.ucas

三个文件)。如果是用UnrealPak打的Pak包,需要将挂载点一起打进包里,才能在自动挂载后正确加载包里的资源。

方法2:手动挂载

2.挂载新Pak,替换旧Pak

方法1:直接替换掉旧Pak文件。若开启IO,需要将.pak/.utoc/.ucas一起替换。

方法2:将Pak放到引擎自动挂载的目录下,并根据优先级规则调整文件名来使优先级高于旧Pak。同样需注意Pak包里包含正确挂载点。若开启IO,需要将.pak/.utoc/.ucas一起重命名。

方法3:手动挂载

3.手动挂载Pak

3.1注意事项:
  • 打包模式使用 Cooked 过的 Pak
  • PIE 模式使用未 Cooked 过的 Pak
  • 打包模式,MountPoint 使用相对路径,即../../../[项目名]/Content/[子目录名]
  • PIE模式,MountPoint 使用绝对路径,即FPaths::ProjectContentDir() + TEXT("[Content后的子目录]/")
  • 需要切换到Pak平台下,才能加载Pak包中的资源
  • Cook路径和挂载点路径尽量保持一致,否则容易导致依赖丢失
  • 若开启IO,需要将.pak/.utoc/.ucas放在相同目录下,只有.pak是无法正确挂载的。
  • 可以挂载与包里同名的Pak
3.2核心代码示例

示例情境:

  1. 工程E:\UE5Projects\PakDemo\Content\Pak1下有一个蓝图Actor1,且关闭IO。
  2. Cook后,使用UnrealPak将E:\UE5Projects\PakDemo\Saved\Cooked\Windows\PakDemo\Content\Pak1下的资源打包到G:\Actor1.pak。
  3. 通过代码手动挂载Actor1.pak,加载蓝图Actor1并创建实例
  4. //.Build.cs 添加 PakFile 模块
    //获取当前使用的平台
    InnerPlatformFile = &FPlatformFileManager::Get().GetPlatformFile();
    InnerPlatformFile->GetName());	
    //初始化PakPlatformFile
    PakPlatformFile = MakeShareable(new FPakPlatformFile());
    PakPlatformFile.Get()->Initialize(InnerPlatformFile, TEXT(""));
    // 切换到Pak平台
    FPlatformFileManager::Get().SetPlatformFile(*PakPlatformFile.Get());
    // 获取Pak文件(PakPath = “G:\Actor1.pak” )
    TRefCountPtr<FPakFile> PakFile = new FPakFile(InnerPlatformFile, *PakPath, false);
    FString MountPoint = PakFile->GetMountPoint();
    //按需调整挂载点,若Pak包里包含正确挂载点,则无需调整
    //PIE模式
    //MountPoint = FPaths::ProjectContentDir() + TEXT("Pak1/");
    //打包模式
    MountPoint = TEXT("../../../PakDemo/Content/Park1");
    //对pak文件进行挂载
    //100000为优先级
    //若Pak包里自带正确挂载点,*MountPoint可不传
    if (PakPlatformFile->Mount(*PakPath, 100000, *MountPoint))
    {
        //加载Actor1并创建实例
        UClass* BP_PakTestClass = LoadClass<AActor>(nullptr,TEXT("Blueprint'/Game/Pak1/Actor1.Actor1_C'"));
        if (BP_PakTestClass) 
        {
            GetWorld()->SpawnActor<AActor>(BP_PakTestClass,
            FVector::ZeroVector,FRotator::ZeroRotator);
        }
    }
    

  • 14
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答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对于游戏开发者来说是非常有价值的。它提供了强大的游戏开发平台和工具,拥有丰富的学习资源和社区支持,可以帮助开发者实现更多的游戏创意和潜力。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值