02 - 文件结构和编译选项
本文主要说明了UE5中:
- 项目文件夹的层次结构
- 引擎文件夹的层次结构
- VS的编译选项类型
项目文件结构
UE项目的文件结构如下:
- Binaries:存放编译生成的结果二进制文件;
- Config:配置文件;
- Content:存放项目的蓝图和其他资源;
- DerivedDataCache:存放引擎针对各平台特化后的资源。例如同一张图片,在不同平台上的存储格式不同,可在不修改原始
uasset
的基础上快速生成; - Intermediate:存放临时生成的中间文件,例如:
Build
的中间文件,.obj
文件和预编译头文件等;UHT
预处理生成的.generated.h/.cpp
文件;VS.vcxproj
项目文件;通过.uproject
编译生成的Shader
文件;Asset Registry
系统(uasset
资源的索引)的缓存文件AssetRegistryCache
等; - Platforms:存放多平台配置的文件或代码;
- Plugins:存放普通插件和
GameFeatures
插件,其中普通插件的文件结构如下:- Binaries:存放可执行文件或编译期间产生的其他文件;
- Config:插件的配置文件;
- Intermediate;
- Resources:插件额外资源目录,例如图标;
- Source:插件源代码;
- ThirdParty:插件引入的第三方库;
- 插件名.uplugin
- Saved:存储自动保存文件,例如一些配置文件、日志文件等;
- Source:代码文件;
- 项目名.uproject:描述该项目的信息,使用哪些插件,并能切换项目引擎版本,生成
.sln
文件等操作;
可删除的文件
通常情况下:
- 项目层级下的
.vs
,Binaries
,DerivedDataCache
,Intermediate
,Saved
,.vsconfig
,*.sln
文件可以被忽略并删除。 - 项目插件层级下的
Binaries
,Intermediate
也可以被忽略或删除。但有些预编译插件,即未提供源码的插件不可执行该操作,会导致项目编译失败。
.gitignore
参考的.gitignore
文件:
# UE Project Base
.vs/
Binaries/
DerivedDataCache/
Intermediate/
Saved/
DerivedDataCache/
Build/
.vsconfig
*.sln
# lfs
hooks/
lfs/
.gitattributes
参考的.gitattributes
文件:
# UE Project Files
*.uasset filter=lfs diff=lfs merge=lfs -text
*.umap filter=lfs diff=lfs merge=lfs -text
*.pak filter=lfs diff=lfs merge=lfs -text
*.dll filter=lfs diff=lfs merge=lfs -text
*.lib filter=lfs diff=lfs merge=lfs -text
*.exe filter=lfs diff=lfs merge=lfs -text
*.pdb filter=lfs diff=lfs merge=lfs -text
# doc
*.pdf filter=lfs diff=lfs merge=lfs -text
*.docx filter=lfs diff=lfs merge=lfs -text
*.pptx filter=lfs diff=lfs merge=lfs -text
# zip
*.zip filter=lfs diff=lfs merge=lfs -text
*.7z filter=lfs diff=lfs merge=lfs -text
*.rar filter=lfs diff=lfs merge=lfs -text
# Img
*.png filter=lfs diff=lfs merge=lfs -text
*.webp filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.bmp filter=lfs diff=lfs merge=lfs -text
*.jpeg filter=lfs diff=lfs merge=lfs -text
# PS
*.psd filter=lfs diff=lfs merge=lfs -text
# Audio
*.amr filter=lfs diff=lfs merge=lfs -text
*.pcm filter=lfs diff=lfs merge=lfs -text
*.speex filter=lfs diff=lfs merge=lfs -text
*.wav filter=lfs diff=lfs merge=lfs -text
引擎文件结构
源码版引擎(5.4.4)的文件结构如下:
- Engine:引擎文件夹,它的文件结构如下:
- Binaries:包含中间文件和生成的可执行文件,不能删;
- Build:包含构建引擎或游戏所需的文件,平台构建相关所需的文件;
- Config:引擎的配置文件;
- Content:内置的引擎或游戏内容,包括资源包和贴图等;
- DerivedDataCache:引擎加载时的一些缓冲文件,用于加快引擎加载;
- Extras:引擎提供的额外工具包,例如集成AndroidSDK的工具,集成VS的工具等;
- Intermediate:构建引擎或游戏时生成的临时文件,例如着色器等;
- Platforms:针对不同平台的特定内容;
- Plugins:引擎插件所在的目录,其中的 Marketplace则包含商城中下载的插件;
- Programs:独立程序运行时的一些日志和配置信息;
- Saved:自动保存的配置和日志文件;
- Shader:引擎的着色器源文件
.usf
; - Source:引擎源代码,它的文件结构如下:
- Developer:编辑器和引擎共同使用的文件;
- Editor:仅供编辑器使用的文件;
- Programs:引擎或编辑器使用的外部工具和独立程序;
- Runtime:仅供引擎使用的底层模块,不依赖于
Developer
和Editor
。包括:Core,基础数据类型和函数;CoreUObject,UObject
的实现;Engine,Game
类以及引擎核心框架;OnlineSubSystem,多人游戏特性;Slate,控件库以及高阶UI特性;
- FeaturePacks:官方提供的模板工程资源;
- Samples:官方提供的示例项目;
- Template:官方提供的样例工程;
- Setup.bat:构建引擎时用到,用于拉取第三方依赖,安装环境,修改环境变量等操作;
- GenerateProjectFiles.bat:用于生成引擎的VS工程;
编译选项类型
UBT和UHT
UE5支持通过UBT和UHT进行多平台编译,其中:
- UBT(Unreal Build Tool):使用
C#
语言,它是UE的自定义构建工具,用来编译UE的各个模块并处理它们的依赖关系。项目中的Target.cs
(确认打包的目标平台),Build.cs
(确认要链接的模块,访问它们的路径)等都是为这个工具服务的。 - UHT(Unreal Header Tool):使用
C++
语言,它是UE的C++代码解析生成工具,通过代码中的宏(如UCLASS()
)和*.generated.h
提供的信息进行C++反射代码的生成。
总的来说,UBT会先调用UHT,让它解析并生成反射代码,然后调用平台特定的编译工具来编译各个模块,最后启动编辑器或游戏。
编译选项
UE提供了许多可用的编译配置选项,上述编译配置选项由两部分组成:引擎和游戏项目的状态,正在编译的目标。默认使用的是Development Editor
,由于此模式会对代码进行优化,要逐行调试得选中Debug
选项或者使用防止优化的宏。
参考资料
- UE5 虚幻引擎UEC++从基础到进阶_哔哩哔哩_bilibili
- 虚幻引擎目录结构 | 虚幻引擎 5.4 文档 | Epic Developer Community