UE4 打包相关(一)

导语
想知道从C++代码/蓝图脚本/资产到打包成可执行程序,UE都帮我们干了些什么吗?
版本:UE4.21

基本名词解释

ps:受限于当前的知识水平,难免产生理解错误,后期会继续完善修正。

UHT (UnrealHeaderTool )

我粗浅的理解就是UE自己的代码预处理器(相对于C++ 的预处理过程),UHT对代码文件内容进行处理,生成 .generated.h/.gen.cpp 文件,加入反射信息,适配UObject,在以便在在运行时能获取和使用这些数据。
生成的文件在 \Intermediate\Build\Win64\UE4Editor\Inc\YourProject 目录下。

UObject提供了 元数据、反射数据、GC垃圾回收、序列化

UBT (UnrealBuildTool)

UnrealBuildTool (UBT)管理在各种不同的构建配置下构建UE4源代码的过程;
UBT 程序源代码在Engine\Source\Programs\UnrealBuildTool 目录下;
UBT 的配置项在 UnrealBuildTool\Configuration\BuildConfiguration.cs 文件中。

UAT (AutomotionTool)

UnrealBuildTool (UBT)管理在各种不同的构建配置下构建UE4源代码的过程;
UBT 程序源代码在Engine\Source\Programs\UnrealBuildTool 目录下;
UBT 的配置项在 UnrealBuildTool\Configuration\BuildConfiguration.cs 文件中。

Build 构建

这里说的不是 UE 编辑器上Build按钮,那主要是负责提前计算场景中光照数据、物体可见性、导航网格等。
我们说的是源代码source code 的构建。
首先我们执行编辑器的 File->Refresh Visual Studio Project,在输出日志中我们会看到如下信息:
(此操作等同在 xxx.uproject 上右击 Generate visual studio project files, ps:必须是C++ 项目)

1
2
3
4
5
6
Running .../UnrealEngine/Engine/Binaries/DotNET/UnrealBuildTool.exe  -projectfiles -project=".../MyProject.uproject" -game -engine -progress
Discovering modules, targets and source code for project...
Binding IntelliSense data...
Binding IntelliSense data... 100%
Writing project files...
Writing project files... 100%

我们看到UBT(UnrealBuildTool)这个程序开始执行了。

Complie 编译

在VS等IDE 中执行编译, UE 引擎也提供了热编译功能(在不关闭引擎的情况下,对修改的c++代码进行重新编译) 。
这个过程就是编译C++ 代码,生成Binaries二进制文件。

Cook 烘焙

1
2
3
4
5
6
7
8
9
10
UATHelper: Cooking (Windows (64-bit)): Running AutomationTool...
UATHelper: Cooking (Windows (64-bit)): Parsing command line: -ScriptsForProject="C:/Users/Administrator/Documents/Unreal Projects/MyProject/MyProject.uproject" BuildCookRun -nocompileeditor -nop4 -project="C:/Users/Administrator/Documents/Unreal Projects/MyProject/MyProject.uproject" -cook -skipstage -ue4exe=C:\Users\Administrator\Documents\UnrealEngine\Engi
ne\Binaries\Win64\UE4Editor-Cmd.exe -targetplatform=Win64 -utf8output -compile
UATHelper: Cooking (Windows (64-bit)): Dependencies are up to date (0.071s). Skipping compile.
UATHelper: Cooking (Windows (64-bit)): Setting up ProjectParams for C:\Users\Administrator\Documents\Unreal Projects\MyProject\MyProject.uproject
UATHelper: Cooking (Windows (64-bit)): ********** COOK COMMAND STARTED **********
UATHelper: Cooking (Windows (64-bit)): Running UE4Editor Cook for project C:\Users\Administrator\Documents\Unreal Projects\MyProject\MyProject.uproject
UATHelper: Cooking (Windows (64-bit)): Commandlet log file is C:\Users\Administrator\Documents\UnrealEngine\Engine\Programs\AutomationTool\Saved\Cook-2021.08.21-15.00.49.txt
UATHelper: Cooking (Windows (64-bit)): Running: C:\Users\Administrator\Documents\UnrealEngine\Engine\Binaries\Win64\UE4Editor-Cmd.exe "C:\Users\Administrator\Documents\Unreal Projects\MyProject\MyProject.uproject" -run=Cook -TargetPlatform=WindowsNoEditor -fileopenlog -unversioned -abslog=C:\Users\Administrator\Documents\UnrealEngine\Engine\Programs\Automat
ionTool\Saved\Cook-2021.08.21-15.00.49.txt -stdout -CrashForUAT -unattended -NoLogTimes -UTF8Output
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
LogUObjectHash: Compacting FUObjectHashTables data took   0.52ms
UATHelper: Packaging (Windows (64-bit)): Running AutomationTool...
UATHelper: Packaging (Windows (64-bit)): Parsing command line: -ScriptsForProject="C:/Users/Administrator/Documents/Unreal Projects/MyProject/MyProject.uproject" BuildCookRun -nocompileeditor -nop4 -project="C:/Users/Administrator/Documents/Unreal Projects/MyProject/MyProject.uproject" -cook -stage -archive -archivedirectory="C:/Users/Administrator/Documents
/Unreal Projects/MyProject" -package -ue4exe=C:\Users\Administrator\Documents\UnrealEngine\Engine\Binaries\Win64\UE4Editor-Cmd.exe -pak -prereqs -nodebuginfo -targetplatform=Win64 -build -target=MyProject -clientconfig=Development -utf8output -compile
UATHelper: Packaging (Windows (64-bit)): Dependencies are up to date (0.073s). Skipping compile.
UATHelper: Packaging (Windows (64-bit)): Setting up ProjectParams for C:\Users\Administrator\Documents\Unreal Projects\MyProject\MyProject.uproject
UATHelper: Packaging (Windows (64-bit)): ********** BUILD COMMAND STARTED **********
UATHelper: Packaging (Windows (64-bit)): Running: C:\Users\Administrator\Documents\UnrealEngine\Engine\Binaries\DotNET\UnrealBuildTool.exe UnrealPak Win64 Development -Project="C:\Users\Administrator\Documents\Unreal Projects\MyProject\MyProject.uproject" "C:\Users\Administrator\Documents\Unreal Projects\MyProject\MyProject.uproject" -NoUBTMakefiles -Manif
est=C:\Users\Administrator\Documents\UnrealEngine\Engine\Intermediate\Build\Manifest.xml -NoHotReload -log="C:\Users\Administrator\Documents\UnrealEngine\Engine\Programs\AutomationTool\Saved\Logs\UBT-UnrealPak-Win64-Development.txt"
UATHelper: Packaging (Windows (64-bit)): Writing manifest to C:\Users\Administrator\Documents\UnrealEngine\Engine\Intermediate\Build\Manifest.xml
UATHelper: Packaging (Windows (64-bit)): Building UnrealPak...
UATHelper: Packaging (Windows (64-bit)): Using Visual Studio 2019 14.28.29913 toolchain (C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29910) and Windows 10.0.18362.0 SDK (C:\Program Files (x86)\Windows Kits\10).
UATHelper: Packaging (Windows (64-bit)): Building 1 action with 12 processes...
UATHelper: Packaging (Windows (64-bit)): [1/1] UnrealPak.target
UATHelper: Packaging (Windows (64-bit)): Total time in Parallel executor: 0.15 seconds
UATHelper: Packaging (Windows (64-bit)): Total execution time: 2.46 seconds
UATHelper: Packaging (Windows (64-bit)): Took 2.5490017s to run UnrealBuildTool.exe, ExitCode=0
UATHelper: Packaging (Windows (64-bit)): Running: C:\Users\Administrator\Documents\UnrealEngine\Engine\Binaries\DotNET\UnrealBuildTool.exe MyProject Win64 Development -Project="C:\Users\Administrator\Documents\Unreal Projects\MyProject\MyProject.uproject" "C:\Users\Administrator\Documents\Unreal Projects\MyProject\MyProject.uproject" -NoUBTMakefiles -remot
eini="C:\Users\Administrator\Documents\Unreal Projects\MyProject" -skipdeploy -Manifest=C:\Users\Administrator\Documents\UnrealEngine\Engine\Intermediate\Build\Manifest.xml -NoHotReload -log="C:\Users\Administrator\Documents\UnrealEngine\Engine\Programs\AutomationTool\Saved\Logs\UBT-MyProject-Win64-Development.txt"
UATHelper: Packaging (Windows (64-bit)): Parsing headers for MyProject
UATHelper: Packaging (Windows (64-bit)): Running UnrealHeaderTool "C:\Users\Administrator\Documents\Unreal Projects\MyProject\MyProject.uproject" "C:\Users\Administrator\Documents\Unreal Projects\MyProject\Intermediate\Build\Win64\MyProject\Development\MyProject.uhtmanifest" -LogCmds="loginit warning, logexit warning, logdatabase error" -Unattended -Warn
ingsAsErrors -abslog="C:\Users\Administrator\Documents\UnrealEngine\Engine\Programs\AutomationTool\Saved\Logs\UHT-MyProject-Win64-Development.txt"
UATHelper: Packaging (Windows (64-bit)): Reflection code generated for MyProject in 7.6218441 seconds
UATHelper: Packaging (Windows (64-bit)): Writing manifest to C:\Users\Administrator\Documents\UnrealEngine\Engine\Intermediate\Build\Manifest.xml
UATHelper: Packaging (Windows (64-bit)): Building MyProject...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
LogPlayLevel: Completed Launch On Stage: Cooking in the editor, Time: 5.859237
LogPlayLevel: Running AutomationTool...
LogPlayLevel: Parsing command line: -ScriptsForProject="C:/Users/Administrator/Documents/Unreal Projects/MyProject/MyProject.uproject" BuildCookRun -project="C:/Users/Administrator/Documents/Unreal Projects/MyProject/MyProject.uproject" -noP4 -clientconfig=Development -serverconfig=Development -nocompileeditor -ue4exe=C:\Users\Administrator\Documents\UnrealE
ngine\Engine\Binaries\Win64\UE4Editor-Cmd.exe -utf8output -platform=Win64 -targetplatform=Win64 -ini:Game:[/Script/UnrealEd.ProjectPackagingSettings]:BlueprintNativizationMethod=Disabled -build -map=/Game/ThirdPersonCPP/Maps/ThirdPersonExampleMap -skipcook -CookInEditor -iterativecooking -compressed -iterativedeploy -stage -deploy -cmdline="/Game/ThirdPerson
CPP/Maps/ThirdPersonExampleMap -Messaging" -device=WindowsNoEditor@FNEO48MGKFVU1R6 -addcmdline="-SessionId=F0F275C749ED33221ED7CE83A5061BC4 -SessionOwner='Administrator' -SessionName='Launch On Device' " -run -compile
LogPlayLevel: Dependencies are up to date (0.078s). Skipping compile.
LogPlayLevel: Setting up ProjectParams for C:\Users\Administrator\Documents\Unreal Projects\MyProject\MyProject.uproject
LogPlayLevel: ********** BUILD COMMAND STARTED **********
LogPlayLevel: Completed Launch On Stage: Build Task, Time: 2.761045
LogPlayLevel: Running: C:\Users\Administrator\Documents\UnrealEngine\Engine\Binaries\DotNET\UnrealBuildTool.exe UnrealPak Win64 Development -Project="C:\Users\Administrator\Documents\Unreal Projects\MyProject\MyProject.uproject" "C:\Users\Administrator\Documents\Unreal Projects\MyProject\MyProject.uproject" -NoUBTMakefiles -Manifest=C:\Users\Administrator\
Documents\UnrealEngine\Engine\Intermediate\Build\Manifest.xml -NoHotReload -log="C:\Users\Administrator\Documents\UnrealEngine\Engine\Programs\AutomationTool\Saved\Logs\UBT-UnrealPak-Win64-Development.txt"
LogPlayLevel: Writing manifest to C:\Users\Administrator\Documents\UnrealEngine\Engine\Intermediate\Build\Manifest.xml
LogPlayLevel: Target is up to date
LogPlayLevel: Total execution time: 1.16 seconds
LogPlayLevel: Took 1.2479697s to run UnrealBuildTool.exe, ExitCode=0
LogPlayLevel: Running: C:\Users\Administrator\Documents\UnrealEngine\Engine\Binaries\DotNET\UnrealBuildTool.exe MyProject Win64 Development -Project="C:\Users\Administrator\Documents\Unreal Projects\MyProject\MyProject.uproject" "C:\Users\Administrator\Documents\Unreal Projects\MyProject\MyProject.uproject" -NoUBTMakefiles -remoteini="C:\Users\Administrato
r\Documents\Unreal Projects\MyProject" -skipdeploy -ini:Game:[/Script/UnrealEd.ProjectPackagingSettings]:BlueprintNativizationMethod=Disabled -Manifest=C:\Users\Administrator\Documents\UnrealEngine\Engine\Intermediate\Build\Manifest.xml -NoHotReload -log="C:\Users\Administrator\Documents\UnrealEngine\Engine\Programs\AutomationTool\Saved\Logs\UBT-MyProject-Wi
n64-Development.txt"
LogPlayLevel: Parsing headers for MyProject
LogPlayLevel: Running UnrealHeaderTool "C:\Users\Administrator\Documents\Unreal Projects\MyProject\MyProject.uproject" "C:\Users\Administrator\Documents\Unreal Projects\MyProject\Intermediate\Build\Win64\MyProject\Development\MyProject.uhtmanifest" -LogCmds="loginit warning, logexit warning, logdatabase error" -Unattended -WarningsAsErrors -abslog="C:\Us
ers\Administrator\Documents\UnrealEngine\Engine\Programs\AutomationTool\Saved\Logs\UHT-MyProject-Win64-Development.txt"
LogPlayLevel: Reflection code generated for MyProject in 5.4499816 seconds
LogPlayLevel: Writing manifest to C:\Users\Administrator\Documents\UnrealEngine\Engine\Intermediate\Build\Manifest.xml
LogPlayLevel: Building MyProject...

未完待续。。。

------------- 感谢您的阅读-------------
作者dreamingpoet
有问题请发邮箱 Dreamingoet@126.com
您的鼓励将成为创作者的动力