1前言
Epic Games 的 Unreal Engine 4 是一个强大的工具,可以创建任何类型的游戏甚至应用程序,但实现的自动化和构建系统几乎没有任何好的文档可以参考。这篇文章将展示如何使用虚幻自动化工具 (UAT)来 构建、Cook和打包游戏,并将简要的概述一些隐藏的工具。
2引擎类型和一些术语
在我们开始深入研究自动化系统之前,我们需要定义一些术语。我们将要使用的中心工具是虚幻自动化工具 (UAT)。除了构建和打包应用程序之外,该工具是引擎内部任何类型自动化的主要入口点。UAT 支持命令行开关,通常是在引擎生态系统中运行的一组命令。UAT 使用位于 Engine/Build/BatchFiles 中的脚本启动(*.sh for linux,*.command for mac 和 *.bat for Windows)。对于 UAT,这将是 RunUAT 脚本。附加 -list 会返回可用命令的列表。可以使用 -help 可检索有关 UAT 的更多信息。
了解 UAT 在哪种类型的Engine上运行非常重要。共有三种不同的Engine类型,它们需要对命令行进行一些更改,具体取决于所使用的类型。
第一个也是最常见的引擎类型是所谓的 Rocket build。当您通过 Epic Games Launcher 安装引擎时,您将获得Rocket build。这是引擎的预构建、即用型版本。根据您在启动器中选择的选项,它包含为所有桌面应用程序和移动目标打包项目所需的所有依赖项。
接下来一种引擎类型是从源代码编译而来。这种构建类型是您从 GitHub 克隆或下载虚幻引擎的 repository 时获得的。这是最通用的引擎类型,因为可以更改和重新编译引擎的源代码。虽然这种引擎类型是最通用的,但它需要编译所有内容,通常需要 15-60 分钟,具体取决于所使用的系统,并且占用的大小是预构建引擎的 4 倍以上.
最后一个工具就是我们所需要的进行自动部署的工具 Unreal Build Tool (UBT),它是在引擎内部构建源代码的主要工具。当尝试仅使用 UAT 打包项目时,由于缺少项目的编辑器 dll,它将失败(在项目的干净版本上)。要创建缺少的 dll,我们需要使用 UBT 为我们的项目构建编辑器目标。接下来是操作步骤:
3Building the Editor Target
在我们启动 UAT 之前,我们首先需要为我们的项目编译编辑器目标,以获取我们的编辑器 dll 的最新版本。为了构建这些 dll,我们在开发配置中为我们的操作系统(例如 Win64)的项目编辑器目标运行 UBT:
代码语言:javascript复制Build/BatchFiles/Build.bat <ProjectName>Editor Win64 Development <PathToProjectFile>.uproject -WaitMutex
对于干净的构建,可以在构建脚本之前运行 Clean 脚本,也可以使用 Rebuild 脚本代替构建脚本。-WaitMutex 开关告诉构建工具等待此 UBT 实例的全局互斥锁。如果 UBT 当前在别处使用,则省略此开关会使 UBT 返回错误。
4BuildCookRun
使用 UAT 中的 BuildCookRun 命令行开关可以使用完整的打包过程。正如命令行开关的名称所暗示的,这是一个由三部分组成的过程。
- Build:使用所有必要的运行时模块编译引擎、引擎插件、项目插件和项目本身,通常在最后创建一个可执行文件
- Cook:将所有引用的资产转换为目标平台的相应运行时格式(例如,在 Windows 上将纹理转换为 DDS 格式),编译仍然缺少的着色器,将蓝图编译为它们的二进制表示并去除任何编辑信息
- Run:最后一步可以有许多动作要执行。在构建自动化的范围内,我们通常希望将我们的资产打包成 pak 文件并将整个项目归档到一个文件夹中以供进一步处理(例如上传到 Steam)。其他功能包括通过网络自动部署到连接的设备或通过 USB 连接的移动设备并在设备上启动游戏。这些通常不属于完全自动化的过程,因此在此不再赘述。
该过程的完整命令行如下所示:
代码语言:javascript复制call EngineBuildBatchFilesRunUAT.bat" BuildCookRun -Project="<ProjectPath>.uproject" -NoP4 -NoCompileEditor -Distribution -TargetPlatform=Win64 -Platform=Win64 -ClientConfig=Shipping -ServerConfig=Shipping -Cook -Map=List Of Maps To Include -Build -Stage -Pak -Archive -ArchiveDirectory=<ArchivePath> -Rocket -Prereqs -Package
让我们逐一来看:
- BuildCookRun:我们想使用的 BuildCookRun 命令
- -Project=”/.uproject”:必填参数,uproject 文件的绝对路径
- -NoP4:在此构建期间不想与 Perforce 交互(相反是:-P4)
- -NoCompileEditor:据我所知,这个命令似乎已不起作用,省略这个标志应该构建我们之前使用 UBT 构建的编辑器部分,但至少对我来说这不起作用。
- -Distribution:将此构建标记为分发(尤其是为移动平台创建分发包,这通常意味着使用分发证书)
- -TargetPlatform= :我们要打包的平台(用 分隔)
- -ClientConfig=Shipping:我们要打包哪个配置,选项有Debug、Development、Test和Shipping
- -ServerConfig=Shipping:要构建的服务器的目标平台
- -Cook:我们要运行 Cook 步骤
- -Map=List Of Maps To Include:地图名称的特定列表,使用 分隔,以包含。如果省略,它将使用项目设置中指定的那些
- -Build:我们要运行构建步骤
- -Stage:将烹饪结果保存在暂存目录中
- -Pak:使用 pak 文件而不是普通文件系统目录
- -Archive:我们希望将目录中的完整输出归档
- -ArchiveDirectory=:归档项目的路径
- -Rocket:我们正在使用已安装/Rocket 构建
- -Prereqs:包括虚幻引擎先决条件安装程序
- -Package:为目标平台创建一个包(例如Mac上的应用程序文件,Android上的apk或iPhone上的ipa)
请注意,所有开关都不区分大小写(当然区分大小写平台上的路径除外)。
上面的开关和参数集合是打包一个准备运行的应用程序的坚实基础,完全足够了。
5最后
有了所有这些信息,应该很容易成功地将引擎部署集成到您的自动化流程中。
本文翻译自:https://blog.mi.hdm-stuttgart.de/index.php/2017/02/11/uat-automation/