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

相关推荐
归真仙人16 天前
【UE项目迁移银河麒麟(Linux)局域网会话搜索失败排查】
ue5·ue4·vr·unreal engine·银河麒麟
zhangdaliangmvp1 个月前
UE4 垃圾回收(GC)机制详解:从可达性分析到 Mark/Sweep
ue4
清泓y2 个月前
UE移动开发技术面试题
android·面试·ue5·ue4·游戏程序
清泓y2 个月前
UE基础知识与引擎架构面试题
面试·架构·ue5·ue4·游戏程序
Duo1J2 个月前
【UE】Slate 编辑器工具开发03 - 节点编辑器 (EdGraph)
ue5·编辑器·游戏引擎·ue4
学习!!!3 个月前
针对虚幻引擎4中光线追踪内容兼容性的实用解决方案
ue4
Duo1J3 个月前
【UE】Slate 编辑器工具开发01 - Slate语法 & 常用控件
ue5·编辑器·游戏引擎·ue4
DoomGT3 个月前
UE5 - 制作游戏中切换窗口后游戏自动暂停功能
游戏·ue5·ue4·虚幻·虚幻引擎·unreal engine
Yuk丶4 个月前
厌倦了假AI对话?本地 LLM 语音对话 + 口型同步系统 2.0(已开源!)
c++·人工智能·语言模型·开源·ue4·语音识别·游戏开发
归真仙人4 个月前
【UE】LineTraceByProfile
ue5·游戏引擎·ue4·unreal engine