UE4 UAT 的六大流程 build cook stage pacakge archive deploy 与UAT的参数
前言
UAT的命令参数有很多,如下所示,本文将会探讨它们的含义,及其背后所代表的流程。
{UAT的exe}
-ScriptsForProject=j:\Light_Check_\MyGame__Mini\MyGame__Mini.uproject
BuildCookRun
-nop4
-project=j:\Light_Check_\MyGame__Mini\MyGame__Mini.uproject
-cook
-stage
-archive
-archivedirectory=j:\Light_Check_\MyGame__Mini\Saved\Archived
-package
-ue4exe=j:\Light_Check_\EngineSource/Engine/Binaries/Win64/UE4Editor-Cmd.exe
-compressed
-pak
-prereqs
-manifests
-targetplatform=Win64
-build
-target=MyGame__Mini
-clientconfig=Development
-utf8output
-compile
推荐阅读我前面的多篇文档。
一、-build 和 -compile 的区别
从中文的语义来看,它们都是编译,但“编译”是个多义词,分别的含义如下。
-build管的是代码能不能变成可执行程序。
-compile管的是资源(尤其是着色器)在 Cook 时要不要编译。
1、 build:执行编译构建
-build参数是一个总开关,它决定了 UAT 的 BuildCookRun命令是否要执行编译(Compile)和链接(Link)这一步骤。这个步骤是通过调用 UnrealBuildTool(UBT) 来完成的,目的是将你的 C++ 源代码和引擎模块编译成最终的可执行文件(例如游戏的 .exe 文件)或编辑器目标
● 当指定 -build时:UBT 会工作,根据你的 Target(如 -target=DF_UHD_Mini)和配置(如 -clientconfig=Development)来编译项目。
● 当不指定 -build或使用 -skipbuild时:UAT 会跳过编译过程,直接使用之前已经编译好的二进制文件进行后续的 Cook、Stage 等操作。这在你只修改了资源而没有改动代码时非常有用,可以节省大量时间
2、 compile:编译着色器
-compile参数作用于 Cook 阶段。Cook 过程是由 UE4Editor-Cmd.exe在一种特殊命令行模式下运行的,目的是将编辑器中的资源(如纹理、模型、材质、蓝图)转换为目标平台(如 -targetplatform=Win64)所能使用的格式。
● 材质资源依赖于着色器(Shaders),而着色器是需要编译的。-compile参数就控制着在 Cook 资源时是否要编译这些着色器
● 当指定 -compile时:Cook 过程会编译项目所需的所有着色器。
● 当不指定 -compile时:Cook 过程可能会跳过着色器编译(尤其是在使用 -iterativecooking增量 Cook 时),假设着色器已经被编译过且没有变化,从而加快 Cook 速度。
二、成对的参数 如 -build -skipbuild
UAT的流程涉及 Build、Cook、Stage、Package、Archive、Deploy、Run 这些步骤,每一个步骤是否执行,取决于一组形如 -{x} -skip{x} 的参数,具体如下图1所示。
(图1)
三、-stage 和 -archive 都是将产物拷贝到某个目录,它们的区别是什么?
特性 |
|
|
---|---|---|
主要目的 | 为打包做准备,创建临时中间结果 | 长期保存或分发构建结果 |
操作时机 | 在 Cook 之后,Package 之前 | 在整个构建、Cook、Stage 和 Package 流程之后 |
操作内容 | 将编译后的可执行文件和Cook后的资源复制到暂存区 | 将暂存区(Staged Directory)的内容复制到归档目录 |
必要性 | 是打包流程的必要步骤 | 是可选步骤,用于备份或分发 |
输出目录 |
| 由 |
典型用途 | 供后续的 Package 步骤使用 | 保存最终的游戏包用于测试、发布或存档 |
💡 详细解读
1. -stage
(暂存)
-
作用:
-stage
参数指示 UAT 将构建(Build)和烘焙(Cook)步骤产生的所有必要文件(例如可执行文件、Cooked资源、配置文件等)复制到一个暂存目录(Staging Directory)。这个目录可以被看作是最终游戏包的一个"草稿"或"未压缩的原始布局"。 -
流程位置:它在 Cook 之后、Package 之前执行。
-
默认路径:通常位于
[YourProject]/Saved/StagedBuilds/[Platform]
。这是一个(一组)固定的路径。 -
必要性:这是后续进行真正打包(如生成 IPA、APK、EXE 等)或归档的基础,因此通常是必需的。
2. -archive
(归档)
-
作用:
-archive
参数指示 UAT 将已经存在于暂存目录(即-stage
步骤的产出)中的完整内容,复制或移动到另一个由-archivedirectory
参数指定的归档目录中。这相当于对最终打包好的游戏进行备份或分发准备。这也就是为何有 -archivedirectory 但是没有 -stagedirectory 的原因了。 -
流程位置:它在所有核心步骤(Build、Cook、Stage、Package)完成之后执行。
-
依赖性:依赖
-stage
的输出。如果没有先执行-stage
(或使用-skipstage
),-archive
就没有内容可拷贝。 -
目的:主要用于保存构建版本、持续集成系统中的产物保存,或者准备用于分发给测试人员的游戏包。
📦 简单总结
你可以这样理解:
-
-stage
是 "组装",把零件(代码、资源)变成一台完整的机器(游戏目录结构),但机器还停在工厂车间里(暂存目录)。 -
-archive
是 "入库" 或 "装车发货",把车间里组装好的整台机器搬运到仓库(归档目录)存放起来,或者准备运走。
因此,在你的 UAT 命令行中,这两个参数常常同时出现:
-stage -archive -archivedirectory="J:\MyArchivedBuilds"
这表示:"请先为打包准备好所有文件并放到暂存目录(-stage
),然后再将暂存目录里的所有这些文件复制到 'J:\MyArchivedBuilds' 目录下(-archive
)。"
Archive的具体实践操作见:
UE4 BuildCookRun中的Archive的含义_ue4 stage package-CSDN博客
而Stage和Archive步骤的中间,是Package。
四、package具体做了什么事情
在 UE4 的自动化构建流程中,-package
、-stage
和 -archive
是三个关键参数,它们分别代表了不同且顺序明确的阶段。下面这个表格汇总了它们的核心职能与关系:
参数 | 作用阶段 | 核心职能 | 输出结果举例 | 依赖关系 |
---|---|---|---|---|
| 暂存 | 将构建和烘焙后的所有必要文件(可执行文件、Cooked资源等)复制到一个暂存目录 |
| 依赖 Build 和 Cook 步骤的输出 |
| 打包 | 将暂存目录中的文件转换为目标平台的原生分发格式,并进行必要的封装和加密等操作 | Windows的 | 必须依赖 |
| 归档 | 将最终打包好的成品(或暂存目录内容)复制到指定的归档目录进行保存或分发 | 指定 | 依赖 |
💡 详细解读三个阶段
-package
(打包)
此阶段是生成可分发包的关键步骤。它会对暂存目录(-stage
的输出)中的文件进行最终处理,将其转换为目标平台所要求的原生分发格式。例如:
-
在 Windows 上,可能会生成一个包含所有游戏文件的目录(通常带有
.exe
可执行文件)。 -
在 Android 上,会生成
.apk
文件。 -
在 iOS 上,会生成
.ipa
文件。此外,该过程通常还包含资源压缩、加密(如果指定了相关参数)等操作。
-package
操作依赖于-stage
产生的输出,没有暂存目录中的文件,打包步骤就无法进行。
🔄 核心关系与顺序
这三个参数在 UE4 的自动化构建流程中遵循一个明确的顺序:
Build (编译) -> Cook (烘焙) -> -stage
(暂存) -> -package
(打包) -> -archive
(归档)
它们之间的依赖关系是:
-
-stage
是-package
的基础:没有暂存的文件,就无法生成最终的分发包。 -
-package
是-stage
的后续加工:它将暂存的原始文件转换为平台特定的分发格式。 -
-archive
是对前两者产物的保存:它既可以归档暂存目录(-stage
的结果),也可以归档最终打包好的文件(-package
的结果)。
五、将Cooked资源打包成pak,是pacakge的职责之一
阶段 | 核心职能 | 关键输出 | 工具/命令示例 |
---|---|---|---|
Cook (烘焙) | 将编辑器格式资源转换为目标平台格式、优化资源、分析依赖关系、剔除未引用资源。 | 平台特定的已优化资源(如 |
|
Pak (打包) | 将 Cook 后的资源收集并打包成 | 最终的 |
|
🔄 流程梳理
在 UE4 的自动化构建流程(例如使用 BuildCookRun
命令)中,将 Cook 后的资源打包成 .pak
文件,通常是 -package
阶段或整个构建过程的一个重要组成部分。
一个典型的、包含生成 Pak 文件的 UAT 命令看起来是这样的:
RunUAT BuildCookRun -project="YourProject.uproject" -cook -stage -pak -archive -package -targetplatform=Win64
在这个命令中:
-
-cook
:负责资源转换和优化。 -
-pak
:明确指示工具链将 Cook 后的资源打包成.pak
文件。 -
-package
:负责生成最终的分发包(如包含.exe
和.pak
的目录)。
六、deploy的含义
-deploy参数指的是将构建、Cook、打包后的游戏版本传输到目标设备上的这一过程。它通常是自动化构建流程(如使用 BuildCookRun命令)中的一个可选阶段。它将打包好的构建版本传输到目标设备,游戏文件被复制到连接的设备或网络位置。
常见的使用 -deploy的场景包括:
移动设备开发:将打包好的 Android .apk或 iOS .ipa文件安装到连接的手机或平板电脑上。
游戏主机开发:将构建版本部署到 Xbox 或 PlayStation 开发机上。
远程测试:将游戏部署到网络上的另一台计算机或服务器。
自动化测试:在自动化流程中,部署完成后可能会紧接着启动游戏进行测试(配合 -run参数)。
UE4自己实现了deploy的工具链吗?或者它是否已经集成了各个大平台的工具链,如安卓、iOS、鸿蒙、PS5、XBox、Switch等?这我还没有看过。