/images/avatar.png

Papalqi

UE4 编译系统

UE4 编译 UE4的游戏代码工程,从工程的属性可以得知,Build/Clean/Rebuild都是依赖于UBT(Build.bat、Clean.bat和Rebuild.bat)。生成sln文件也依赖于UBT。 1 2 3 4 5 6 # Build Engine\Build\BatchFiles\Build.bat # ReBuild Engine\Build\BatchFiles\Rebuild.bat # Clean Engine\Build\BatchFiles\Clean.bat Generate 这里面的所有配置其实都是我们调用Generate的时候自动为我们添加进去的,我们需要首先看我们Generate 的时候会发生什么,之后是分析这些脚本主要是做了什么。 Generate Visual Studio project files 我们Generate的时候,依旧是调用UE4的脚本GenerateProjectFiles.bat。 1 2 3 4 call "%~dp0GetMSBuildPath.bat" call "%~dp0FixDependencyFiles.bat" call "%~dp0FindPlatformExtensionSources.bat" ..\Binaries\DotNET\UnrealBuildTool.exe -ProjectFiles %* GetMSBuildPath.bat:首先我们查看系统中是否存在MSBuild。MSBuild全称(Microsoft Build Engine),是用于构建应用程序的平台。在使用VS做开发,那么一定时时刻刻在使用它。因为是它在背后为你管理生成你的项目文件。当新建一个项目时,注意下项目文件夹中的*.*proj文件就是为MSBuild提供的,这是个文本文件,基于XML格式,里面包含有项目所包含的文件,生成配置,输出配置等信息。 FixDependencyFiles.bat:检测编辑器使用的Icon。 md ..\Intermediate\Build >nul 2>nul将对应目录清空 Intermediate文件主要初始化了一些马上要用的空文件夹,和在/Build/BuileRules文件夹下的UBT扫描模块时生成的地址(.txt),动态库(.dll),pdb(调试信息文件);还在ProjectFiles文件夹中生成了一些UE4和项目的工程配置文件。 dir /s /b Programs\UnrealBuildTool\*.cs >..\Intermediate\Build\UnrealBuildToolFiles.txt 找到目录下所有以后缀名为.cs的文件添加到UnrealBuildToolFiles.txt中 if exist ..\..\Platforms dir /s /b ..\..\Platforms\*.cs >> ..\Intermediate\Build\UnrealBuildToolFiles.txt//如果存在platforms目录,则将该目录下面的文件也都添加到unrealbuildToolFiles.txt里面 fc /b ..\Intermediate\Build\UnrealBuildToolFiles.txt ..\Intermediate\Build\UnrealBuildToolPrevFiles.txt >nul 2>nul//将unrealBuildToolFiles.txt中的内容拷贝到UnrealBuildToolPrevFiles.txt中

Unreal 代码规范

为什么需要代码规范 Epic的虚幻引擎 C++ 代码规范 | 虚幻引擎5.0文档 (unrealengine.com) 在Epic内部,我们会遵循一些基本的代码标准和规范。本文并非旨在探讨当前的某项工作,而是介绍Epic目前采用的代码规范。下文阐述了我们会严格遵守的一些代码规范。 代码规范对程序员十分重要,原因有几点: 软件生命周期中80%的时间皆需要维护。 原开发者几乎不会对软件进行终身维护。 代码规范可提高软件可读性,让工程师更加快速透彻地理解新代码。 如决定向模组社区开发者公开源代码,则源代码需要易于理解。 交叉编译器兼容性实际上需要此类规则。 版权声明 由Epic提供用于分配的源文件(.h、.cpp、.xaml、etc.)必须在文件的首行包含版权声明。版权声明的格式必须严格按照以下形式编写: 1 // Copyright Epic Games, Inc. All Rights Reserved. 若此行缺失或格式错误,CIS将生成错误或失败提示。 命名规范 所有代码和注释都应采用美式标准英语的拼写和语法。 命名(如类型或变量)中的每个单词需大写首字母,单词间通常无下划线。例如:Health 和 UPrimitiveComponent,而非 lastMouseCoordinates 或 delta_coordinates。 类型名前缀需使用额外的大写字母,用于区分其和变量命名。例如:FSkin 为类型名,而 Skin 则是 FSkin 的实例。 模板类的前缀为T。 继承自 UObject 的类前缀为U。 继承自 AActor 的类前缀为A。 继承自 SWidget 的类前缀为S。 抽象界面类的前缀为I。 Epic提供的概念类型的类(用作 TModels 的第一个参数),其前缀为C。 枚举的前缀为E。 布尔变量必须以b为前缀(例如 bPendingDestruction 或 bHasFadedIn)。 其他多数类均以F为前缀,而部分子系统则以其他字母为前缀。 Typedefs应以任何与其类型相符的字母为前缀:若为结构体的Typedefs,则使用F;若为 Uobject 的Typedefs,则使用U,以此类推。 特别模板实例化的Typedef不再是模板,并应加上相应前缀,例如: 1 typedef TArray<FMytype> FArrayOfMyTypes; C#中省略前缀。 多数情况下,UnrealHeaderTool需要正确的前缀,因此添加前缀至关重要。