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文件名中获取打包的ProjectNameFString 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")));}}

ue4挂载其他工程生成的pak,打开level相关推荐

  1. Qt工程生成xcode工程文件

    前言 xcode 是 Mac 下重要的开发工具,若是用 Qt 开发 Mac/ios 的 App 时,可以使用 xcode 软件进行调试或者配置一些平台属性等等,毕竟是苹果自己的开发工具,使用肯定会比较 ...

  2. 基于bboss开发平台eclipse开发工程生成工具介绍

    为什么80%的码农都做不了架构师?>>>    基于bboss开发平台eclipse开发工程生成工具介绍 一.工具简介   bboss开发平台发布出两个资源包:  war部署包  数 ...

  3. 【UE5】打开他人的UE4/5项目没有.sln文件,打开c++文件失败

    [UE5]打开他人的UE4/5项目没有 .sln文件,打开c++文件失败 rt,下了个项目 进入项目后发现无法从虚幻引擎里打开c++文件,打开失败,进入项目文件夹查看后发现没有sln文件. 拷贝他人的 ...

  4. 【Binder 机制】AIDL 分析 ( 创建 AIDL 文件 | 创建 Parcelable 类 | AIDL 中使用 Parcelable 类 | 编译工程生成 AIDL 对应的Java源文件 )

    文章目录 一.创建 AIDL 文件 1.创建 AIDL 目录 2.创建 AIDL 文件 3.创建 Parcelable 类 4.AIDL 目录下声明 Parcelable 类 5.AIDL 中使用 P ...

  5. PowerDesigner 逆工程生成物理模型图解

    PowerDesigner 逆工程生成物理模型图解 1 PowerDesigner简介 PowerDesigner 是较为常用的数据库以及开发设计工具,本文主要演示通过逆向工程对着AdventureW ...

  6. 修改工程生成的文件类型

    1.为了熟悉新的解决方案,提取接口: 将动态链接库工程改为exe工程,并添加main函数. 修改工程生成的文件类型: 属性->常规->目标文件扩展名 .dll 配置类型 .dll(动态链接 ...

  7. Qt工程生成MiniDump文件

    关于Dump的文件介绍在这里,今天要介绍的是如何在Qt工程生成Dump文件. 首先我们在Qt的pro文件(工程配置文件)要取消优化,并加入调试信息,如下: #加入调试信息 QMAKE_CFLAGS_R ...

  8. springboot在线原型工程生成工具

    在线生成原型工程 前期调研 最开始实现的原型工程是通过maven archetype生成的,可以通过配置私有库idea工具生成和脚本命令的形式生成,但是生成的过程需要检查环境等等,而且时间也需要的长一 ...

  9. UE4拿到了一个老工程如何操作进行打开:在Epic里面打开

    目录 一.目的: 1.因为项目很多不同版本,如何在别的电脑中打开其他的UE4 一.参考: 1.UE4打开别的工程 ①总结:good:介绍了几种打开UE4工程的方法 一.步骤 1.使用相对应得同版本或者 ...

最新文章

  1. java.nio.Buffer flip()方法
  2. 通话录音_iOS14,通话录音终于来了!
  3. 智能算法!数据平台自动生成报表,智慧景区的可视化有什么不同
  4. 12 PP配置-生产主数据-工艺路线相关-定义物料类型分配
  5. Mybatis(6)CURD增删改查操作
  6. 什么是IDE(集成开发环境)?
  7. 养老金中除以139是什么意思?
  8. nodejs-日志组件log4js的使用方法
  9. Arcgis Javascript那些事儿(五)--arcgis server发布自定义比例尺地图
  10. 最大团问题和最大独立子集
  11. matlab形位公差,基于最小区域法的形位公差精确算法.PDF
  12. pythondjango学生信息管理系统_Django实现学员管理系统
  13. XCTF-MFW Git泄露,命令执行漏洞 详解
  14. GNN在推荐系统的应用——>GC-MC与STAR-GCN
  15. 巧用 Redis Hyperloglog,轻松统计 UV 数据
  16. RBP系统管理之日志管理
  17. Executor及Executors
  18. 基于微信小程序开发的demo
  19. Lucene学习——IKAnalyzer中文分词(二)
  20. Excel如何批量加大列宽

热门文章

  1. Res2Net 算法的介绍
  2. MLAT-Autoencoders---下篇-关键代码及结果展示(1)
  3. 【毕业设计】大数据电影数据分析可视化系统 - python 爬虫
  4. 有关七巧板复原的算法初步探讨
  5. TIN的构建、Delaunay三角网、Voronoi图
  6. Spring —— 基于注解的Aop在同一类下产生嵌套时切面不生效问题产生原因及解决
  7. 普通高中计算机装备标准,福建省普通高中信息技术装备标准.doc
  8. OPENMV羽毛球识别
  9. 前端八股文面试题集合
  10. Kali之——使用Easy-Creds工具攻击无线网络