• 【UE5 C++基础 05】UBT基础


    引用马哥的UBT讲解
    UE5是由多个模块组成的,不仅包含虚幻源代码的模块,还有创建项目时生成的模块,如果自己写了插件里面还有插件的模块,每个模块都有自己的功能实现,通过build.cs也有自己的编译方式,里面包含了定义的模块的依赖关系、额外的库、路径等信息。这些文件被编译成dll文件,并通过单一的可执行文件进行加载。

    需要注意的是,开发环境的项目文件的编译是一个独立的过程。

    要想更深入的理解UBT,不得不提及与UBT相关的几个方面:

    Targets、modules、BuildConfigration、IWYU、

    UBT支持编译多种TargetType:

    • Game - 需要烘焙数据来运行的独立游戏;
    • Client - 与Game相同,但包不含任何服务器代码,适用于联网游戏。
    • Server - 与Game相同,但不包含客户端代码,适用于联网游戏种的独立服务器。
    • Editor - 扩展编辑器的一种targetType。
    • Program - 基于虚幻引擎打造的独立工具程序。

    Target

    Target是通过C#源文件声明的,扩展名为.target.cs,并存储在项目的 Source 目录下。每个.target.cs文件都声明一个类,从TargetRules基类衍生而来,并设置属性来控制如何从其构造函数进行编译。当要求编译目标时,虚幻编译工具将编译target.cs文件,并在其中构造类来确定其设置。

    类的名称必须与在其中声明这个类的文件的名称相匹配,后跟“Target”(例如,ThirdPersonMPTarget.target.cs定义类“ThirdPersonMPTarget”)。

    using UnrealBuildTool;
    using System.Collections.Generic;
    
    public class ThirdPersonMPTarget : TargetRules
    {
    	public ThirdPersonMPTarget(TargetInfo Target) : base(Target)
    	{
    		Type = TargetType.Game; // 需要烘焙数据来运行的独立游戏;
    		DefaultBuildSettings = BuildSettingsVersion.V2;
    		ExtraModuleNames.Add("ThirdPersonMP");
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    除此之外,在父类里面还定义了多个可以获取或者更改的变量。

    其中常用的如下:

    • 只读属性

    Name (String):此目标的名称。

    Platform (UnrealTargetPlatform):编译此目标所针对的平台。

    Configuration (UnrealTargetConfiguration):正在被编译的配置。

    • 读/写属性

    Type (TargetType) 目标类型。

    bUsesSteam (Boolean) 目标是否使用Steam。

    bUsesCEF3 (Boolean) 目标是否使用CEF3。
    等等多种属性。

    所有属性参照以下网址:
    Targets官方文档

    Modules

    模块是UE5的构建模块。引擎是由大量的模块集合实现的,开发游戏的时候提供自己的模块来进行扩充。每个模块都包含了一组功能,并且可以提供公共接口和编译环境(包括宏、路径等)来让其他模块使用。

    模块是通过C#源文件声明的,扩展名为.build.cs,存储再项目的Source目录下。属于一个模块的C++源代码与.build.cs文件并列存储,或者存储再他的子目录种。每个.build.cs都声明一个类,从ModuleRules基类衍生而来,并设置属性来控制如何从其构造函数进行构建,这些build.cs文件都由UBT编译。 并被构造来确定整个编译环境。

    .build.cs文件的典型结构如下。

    using UnrealBuildTool;
    
    public class ThirdPersonMP : ModuleRules
    {
    	public ThirdPersonMP(ReadOnlyTargetRules Target) : base(Target)
    	{
    		PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
    
    		PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay" });
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    与Target相同,它也有父类提供的默认变量以供开发者使用:

    与Target不同的是,它里面的变量都是可以修改的读/写变量。

    如:Type(ModuleType) 模块类型 等

    BuildConfiguration

    UBT将从以下位置中的XML配置文件读取设置:

    • Engine/Saved/UnrealBuildTool/BuildConfiguration.xml
    • User Folder/AppData/Roaming/Unreal Engine/UnrealBuildTool/BuildConfiguration.xml
    • My Documents/Unreal Engine/UnrealBuildTool/BuildConfiguration.xml

    配置文件里面有很多参数,可以自定义,了解其中的参数含义可以自定义配置BuildConfiguration.xml来改变编译配置:

    详细的参数列表参照下面链接:
    Modules官方文档

    IWYU(Include what you use)

    顾名思义:只包含你需要的头文件。

    之前的引擎版本大概是4.16之前,包含头文件Engin.h或UnrealEd.h就可以包含大部分你使用到的库,通过预编译头文件(PCH)快速编译这些文件即可达成较快的编译时间。但随着引擎的更新,这成为了一个瓶颈。

    所以,引擎添加了IWYU规则。也就是只包含你所需要的头文件依赖,这样可以减小项目的不必要依赖,精简项目,并且可以大大减少编译时间。

    编写C++代码的时候,需要遵循以下四个原则:

    1. 所有头文件只需要添加必要的依赖头文件;

    2. cpp文件首先包含自己对应的.h文件(也就是要放在第一行);

    3. PCH文件不再是显示包含;

    4. 不再只包含单个头文件;

    IWYU

    Project Files for IDEs

    在VS的IDE中使用.sln项目文件

    除C++的代码外,添加到我们生成多个项目的其他文件的部分示例:

    • 着色器源代码(*.usf文件)

    • 引擎文档文件(*.udn文件)

    • 程序配置文件(*.ini文件)

    • 本地化文件(*.int文件)

    • 程序源文件和清单(*.rc、.manifest)

    • 特定外部(非已生成)项目文件(如UnrealBuildTool、Clean)

    安装UnrealVS扩展

    安装UnrealVS扩展

    1. 在以下位置搜寻您的Visual Studio版本的扩展:
    [UE5RootLocation]/Engine/Extras/UnrealVS/<VS-Version>/UnrealVS.vsix
    
    • 1
    1. 双击 UnrealVS.vsix文件来开始安装。
    2. UnrealVS扩展可用于特定的Visual Studio版本。请注意安装程序正在查找您的版本并且框体已经更新,然后点击Install按钮以继续。
    3. 运行Visual Studio并且在 工具->扩展和更新… 中,您应该可以看到该扩展。
    4. 扩展同时在 帮助->关于微软Visual Studio 对话框的已安装产品列表中显示。
    5. 转到 视图->工具栏 或对Visual Studio工具栏区域 右键点击 ,然后选择 UnrealVS 以显示扩展的工具栏。
    6. 默认情况下,工具栏出现在上方,但其内容可通过选择 命令 选项卡的 UnrealVS 工具栏的 工具->自定义… 来进行自定义。

    用UnrealVS扩展进行整合

    VS的UnrealVS扩展包括一个工具栏按钮,您可以单击该按钮重新生成当前已加载解决方案的项目文件。

    同时还可将快捷键绑定到此功能。在VS中,打开工具(Tools )->选项(Options)-> 环境(Environment)-> 键盘(Keyboard),然后搜索UnrealVS.RefreshProjects。

    注意:加载解决方案后才会启用此功能(因为工具需要了解要针对哪个代码分支来生成项目)。如尚未生成 UE4.sln 文件,需首先直接运行 GenerateProjectFiles.bat 脚本。

    Project Files for IDEs

    二进制文件版本划分

    二进制文件版本划分

  • 相关阅读:
    神经网络与强化学习:揭示AI的超能力
    Spring Boot / Spring Cloud 常见面试题
    【视觉SLAM入门】7.3.后端优化 基于KF/EKF和基于BA图优化的后端,推导及举例分析
    TCP的三次握手和4次挥手
    ubuntu18.04下confluence7.4+mysql5.7.39安装教程
    《牛客题霸-算法篇》刷题之NC339 翻转单词
    Android原生插件开发-环境篇
    Allegro 17.4 SMD 敷铜,Shape 敷铜属性更改, Gerber 生成
    DSPE-PEG-PDP,DSPE-PEG-OPSS,磷脂-聚乙二醇-巯基吡啶可减少肽的免疫原性
    项目架构之 -- 提交代码时的ESLint校验
  • 原文地址:https://blog.csdn.net/AiTanXiing/article/details/125445056