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 都是将产物拷贝到某个目录,它们的区别是什么?

特性 -stage(暂存) -archive(归档)
主要目的 为打包做准备,创建临时中间结果 长期保存或分发构建结果
操作时机 在 Cook 之后,Package 之前 在整个构建、Cook、Stage 和 Package 流程之后
操作内容 编译后的可执行文件Cook后的资源复制到暂存区 暂存区(Staged Directory)的内容复制到归档目录
必要性 是打包流程的必要步骤 可选步骤,用于备份或分发
输出目录 ProjectPath/Saved/StagedBuilds(默认) -archivedirectory参数指定(如未指定,可能有默认路径)
典型用途 供后续的 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是三个关键参数,它们分别代表了不同且顺序明确的阶段。下面这个表格汇总了它们的核心职能与关系:

参数 作用阶段 核心职能 输出结果举例 依赖关系
​**-stage**​ 暂存 将构建和烘焙后的所有必要文件 ​(可执行文件、Cooked资源等)复制到一个暂存目录 Project/Saved/StagedBuilds/下的原始文件 依赖 Build 和 Cook 步骤的输出
​**-package**​ 打包 将暂存目录中的文件转换为目标平台的原生分发格式,并进行必要的封装和加密等操作 Windows的.exe、Android的.apk、iOS的.ipa 必须依赖 -stage的输出
​**-archive**​ 归档 最终打包好的成品 ​(或暂存目录内容)复制到指定的归档目录进行保存或分发 指定 -archivedirectory路径下的最终游戏包或文件副本 依赖 -stage-package的输出

💡 详细解读三个阶段

-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 (烘焙)​ 将编辑器格式资源转换为目标平台格式、优化资源、分析依赖关系、剔除未引用资源。 平台特定的已优化资源(如 .uexp, .ubulk -cook
Pak (打包)​ 将 Cook 后的资源收集并打包成 .pak文件,便于分发、加密和快速加载。 最终的 .pak文件 -pak, UnrealPak.exe

🔄 流程梳理

在 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等?这我还没有看过。

相关推荐
小江村儿的文杰17 小时前
UE4 Rider调试时添加自定义命令行参数
ue4
小江村儿的文杰2 天前
UE4 Mac构建编译报错 no template named “is_void_v” in namespace “std”
macos·ue4
小江村儿的文杰2 天前
理解UE4中C++17的...符号及enable_if_t的用法及SFINAE思想
数据结构·c++·ue4
小江村儿的文杰2 天前
UE4 Mac构建编译报错 no member named “disjunction” in namespace “std”
ue4
小江村儿的文杰3 天前
UE4 Rider如何直接调试PC DebugGame
ue4
DongDongBaJiaYou14 天前
UE5打包,LoadObject加载不出网格|动画
ue5·ue4·虚幻·虚幻引擎
二DUAN帝2 个月前
UE实现路径回放、自动驾驶功能简记
人工智能·websocket·机器学习·ue5·自动驾驶·ue4·cesiumforue
3A是个坏同志3 个月前
UE4手动实现billboard效果让物体始终面向相机正面
ue4
致命的邂逅3 个月前
UE4游戏查找本地角色数据的方法-SDK
游戏·ue4