ue4 FPaths各目录
GetWrappedLaunchDir()
启动时的工作目录,因为马上要把工作目录改为下面所说的exe所在目录,所以会先把当前的缓存起来
FPlatformProcess::BaseDir()
这个是最基本的,就是当前exe文件所在目录。
也是最早被计算的一个目录,因为是所有依赖项的根结点,凡是要把相对路径转成全路径的,都是基于这个目录
可以用【-BaseFromWorkingDir】来把BaseDir指向当前工作目录
FPaths::EngineDir()
引擎目录,用来定位很多擎内置资源。
默认的值是../../../Engine/,而基准目录就是上面的BaseDir
因为在发布后的目录结构里,游戏目录和引擎目录是平级的顶层子目录,exe文件会放在【游戏目录/Binaries/Win64/】下面,退三层后刚好找到Engine
但是,这个目录可以用【GForeignEngineDir】来重载,前提是按默认的方法没找到引擎目录(在引擎目录下没有Binaries子目录),同时在GForeignEngineDir下有Binaries
这也是开发阶段的默认配置,因为此时游戏还未打包,游戏目录与引擎目录不在一起,这时就只能通过GForeignEngineDir来定位引擎了
而此时GForeignEngineDir的实际值是什么呢?其实它是通过编译时传入的宏来定义的:
#if PLATFORM_DESKTOP
#ifdef UE_ENGINE_DIRECTORY
#define IMPLEMENT_FOREIGN_ENGINE_DIR() const TCHAR *GForeignEngineDir = TEXT( PREPROCESSOR_TO_STRING(UE_ENGINE_DIRECTORY) );
#else
#define IMPLEMENT_FOREIGN_ENGINE_DIR() const TCHAR *GForeignEngineDir = nullptr;
#endif
#else
#define IMPLEMENT_FOREIGN_ENGINE_DIR()
#endif
其中UE_ENGINE_DIRECTORY在UEBuildTarget.cs里有设定:
string EnginePath = Utils.CleanDirectorySeparators(Utils.MakePathRelativeTo(ProjectFileGenerator.EngineRelativePath, Path.GetDirectoryName(OutputFilePath)), '/');
if (EnginePath.EndsWith("/") == false)
{
EnginePath += "/";
}
GlobalCompileEnvironment.Config.Definitions.Add("UE_ENGINE_DIRECTORY=" + EnginePath);
而IMPLEMENT_FOREIGN_ENGINE_DIR这个宏的调用出现在UE4Game.cpp里:
#if IS_MONOLITHIC
PER_MODULE_BOILERPLATE
bool GIsGameAgnosticExe = true;
TCHAR GInternalGameName[] = TEXT("");
IMPLEMENT_DEBUGGAME()
IMPLEMENT_FOREIGN_ENGINE_DIR()
#endif
FPaths::RootDir()
根目录,但其实是从引擎目录反推出来的,也就是找到【/Engine】这一段去掉后上一层
但是如果引擎目录里没有/Engine这一段怎么办(上面说过可以重载为一个自定义的)?
FPaths::GameDir()
游戏目录,默认是与引擎目录同级的,以游戏名命名的目录,但是也可以通过【OverrideGameDir】重载
本来是很简单,可是看代码推导过程极其复杂,而且结果也好难理解,明明已经得到最精简的绝对路径了,可最后返回的竟然还是一个充满../的相对路径,还绕来绕去好几层
+ FPaths::GameContentDir returned L"../../../UnrealEngine/../hz413/Content/" FString &
这几个比较“顶级”的目录,各有各的计算逻辑。
除此之外,其它的一些目录就比较简单了,基本上都是在EngineDir和GameDir里加上相应名字的子目录,
如GameContentDir、GameConfigDir、GameSavedDir、GameIntermediateDir等等,每一种也有一个Engine的对应版。
ue4 FPaths各目录的更多相关文章
- ue4 svn备份目录
http://blog.csdn.net/sh15285118586/article/details/55737480 UE4工程文件备份目录有:Config.Content.Plugins.Sour ...
- 修改UE4的deriveddatacache目录位置,扩大C盘空间
按照默认安装目录,UE4会装在C盘 C:\Program Files\Epic Games\UE_4.15 DerivedDataCache缓存目录在 C:\Users\你的用户名\AppData\L ...
- 《Inside UE4》目录
<Inside UE4>目录 InsideUE4 UE4无疑是非常优秀的世界上最顶尖的引擎之一,性能和效果都非常出众,编辑器工作流也非常的出色,更难得宝贵的是完全的开源让我们有机会去从中吸 ...
- 【UE4 C++】简单获取名称、状态、时间、帧数、路径与FPaths
基于UKismetSystemLibrary 获取各类名称 // Returns the actual object name. UFUNCTION(BlueprintPure, Category = ...
- 如何使用的Ue4自带的SQLiteSupport
在UE4.6版本加入的模块.可以让开发者使用SQLite数据库.SQlite是个轻量型的本地数据库. 我下面就来介绍一下如何使用这个模块. 第一步:下载SQLite源代码以及SQLite GUI管理工 ...
- UE4使用第三方库读写xml文件
原文链接:http://gad.qq.com/article/detail/7181031 本文首发腾讯GAD开发者平台,未经允许,不得转载 在游戏开发过程中,读写xml几乎已经成为不可或缺的功能,但 ...
- 详解UE4静态库与动态库的导入与使用
转自:http://blog.csdn.net/u012999985/article/details/71554628 一.基本内容概述 最近做项目时经常看到build.cs文件,就想研究一下UE ...
- UE4使用Dll
Part1. 创建和编译Dll VS中创建Visual C++ > Win32 Console Application 工程模板,选择Dll,并勾上”Empty Project”. 在Solut ...
- UE4 Pak 相关知识总结
转载自:https://arcecho.github.io/2017/07/02/UE4-Pak-%E7%9B%B8%E5%85%B3%E7%9F%A5%E8%AF%86%E6%80%BB%E7%BB ...
随机推荐
- js的原型模式
以下内容来自<JavaScript高级程序设计>第三版 我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所 ...
- 转 LoadRunner 技巧之协议分析
在做性能测试的时候,协议分析是困扰初学者的难题,选择错误的协议会导致Virtual User Generator 录制不到脚本:或录制的脚本不完整,有些应用可能需要选择多个协议才能完整的记录 客户端与 ...
- java ppt课后作业
1 .仔细阅读示例: EnumTest.java,运行它,分析运行结果? 枚举类型是引用类型,枚举不属于原始数据类型,它的每个具体值都引用一个特定的对象.相同的值则引用同一个对象.可以使用“==”和e ...
- Python自动化 【第十四篇】:HTML介绍
本节内容: Html 概述 HTML文档 常用标签 2. CSS 概述 CSS选择器 CSS常用属性 1.HTML 1.1概述 HTML是英文Hyper Text Mark-up Language(超 ...
- 利用循环播放dataurl的视频来防止锁屏:NoSleep.js
mark下. 地址:http://www.open-open.com/lib/view/open1430796889882.html
- Android代码故事第一回,平均间隔的按钮
我们的APP新做了一个放操作按钮的界面,老板要求简洁美观有内涵,按钮要均匀分布,于是参考之前的实现,设计MM给了一张图,像这样: |================================== ...
- android subclipse subversive
subclipse - http://subclipse.tigris.org/update_1.10.x android 开源框架 直接拿来用!最火的Android开源项目整理 http://blo ...
- 构建winform控件数据缓存器
DataBindingHelper使用手册 1.引用Rabbit.Core.dll文件 也就是我自己编写的功能库Rabbit.Core.dll呵呵. Rabbi.Core.DLL密码:dgqv ...
- c# XML和实体类之间相互转换(序列化和反序列化)[砖]
link: http://blog.okbase.net/haobao/archive/62.html by: 好饱 我们需要在XML与实体类,DataTable,List之间进行转换,下面是XmlU ...
- 打水印 Imagename_biao是水印文件 ImgName是原图
/** * 打水印 Imagename_biao是水印文件 ImgName是原图 * @param Imagename_biao * @param ImgName */ public static v ...