使用虚幻引擎自动化工具实现自动化部署

4,109 阅读7分钟

前言

Epic Games 的 Unreal Engine 4 是一个强大的工具,可以创建任何类型的游戏甚至应用程序,但实现的自动化和构建系统几乎没有任何好的文档可以参考。这篇文章将展示如何使用虚幻自动化工具 (UAT)来 构建、Cook和打包游戏,并将简要的概述一些隐藏的工具。

引擎类型和一些术语

在我们开始深入研究自动化系统之前,我们需要定义一些术语。我们将要使用的中心工具是虚幻自动化工具 (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 为我们的项目构建编辑器目标。接下来是操作步骤:

Building the Editor Target

在我们启动 UAT 之前,我们首先需要为我们的项目编译编辑器目标,以获取我们的编辑器 dll 的最新版本。为了构建这些 dll,我们在开发配置中为我们的操作系统(例如 Win64)的项目编辑器目标运行 UBT:

Build/BatchFiles/Build.bat <ProjectName>Editor Win64 Development <PathToProjectFile>.uproject -WaitMutex

对于干净的构建,可以在构建脚本之前运行 Clean 脚本,也可以使用 Rebuild 脚本代替构建脚本。-WaitMutex 开关告诉构建工具等待此 UBT 实例的全局互斥锁。如果 UBT 当前在别处使用,则省略此开关会使 UBT 返回错误。

BuildCookRun

使用 UAT 中的 BuildCookRun 命令行开关可以使用完整的打包过程。正如命令行开关的名称所暗示的,这是一个由三部分组成的过程。

  • Build:使用所有必要的运行时模块编译引擎、引擎插件、项目插件和项目本身,通常在最后创建一个可执行文件
  • Cook:将所有引用的资产转换为目标平台的相应运行时格式(例如,在 Windows 上将纹理转换为 DDS 格式),编译仍然缺少的着色器,将蓝图编译为它们的二进制表示并去除任何编辑信息
  • Run:最后一步可以有许多动作要执行。在构建自动化的范围内,我们通常希望将我们的资产打包成 pak 文件并将整个项目归档到一个文件夹中以供进一步处理(例如上传到 Steam)。其他功能包括通过网络自动部署到连接的设备或通过 USB 连接的移动设备并在设备上启动游戏。这些通常不属于完全自动化的过程,因此在此不再赘述。

该过程的完整命令行如下所示:

call Engine\Build\BatchFiles\RunUAT.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)

请注意,所有开关都不区分大小写(当然区分大小写平台上的路径除外)。

上面的开关和参数集合是打包一个准备运行的应用程序的坚实基础,完全足够了。

最后

有了所有这些信息,应该很容易成功地将引擎部署集成到您的自动化流程中。

我是杰少,如果您觉的我写的不错,那请给我 点赞+评论+收藏 后再走哦!

往期文章:

请你喝杯 ☕️ 点赞 + 关注哦~

  1. 阅读完记得给我点个赞哦,有👍 有动力
  2. 关注公众号--- HelloWorld杰少,第一时间推送新姿势

最后,创作不易,如果对大家有所帮助,希望大家点赞支持,有什么问题也可以在评论区里讨论😄~**