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:仅供引擎使用的底层模块,不依赖于DeveloperEditor。包括:Core,基础数据类型和函数;CoreUObjectUObject的实现;EngineGame类以及引擎核心框架;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