序言

使用UE版本为UE5.20

在实际项目中,我们常常使用自动化脚本来进行构建,它可以增加我们的生产效率,并降低人为操作带来的失误风险。

BuildGraph

BuildGraph UE官方提供的构建脚本系统,它可以读取对应的XML脚本实现自动化打包。

BuildGraph相关的参考BuildGraph | UE文档

重点是它相关的语法

自动化脚本

自动化脚本我打算使用(.bat / .sh)“壳”文件作为入口,运行py脚本并拉起运行BuildGraph命令的UAT,并且设定相关的参数。

Build.bat

python3 Build.py

运行该目录的py脚本

Build.py

import sys
import os def main(argv):
ProjectName = "BuildTest"
ProjectDir = r"E:/AllProject/UE_5_2_0/BuildTest/"
Platform = "Android"
ClientConfig = "Development"
OutputDir = r"E:/AllProject/UE_5_2_0/BuildTest/PakOutputX"
SkipBuildProject = "true"
SkipBuildEditor = "true"
Unrealexe = r"E:\UE\UE_4.27_Source\UnrealEngine\Engine\Binaries\Win64\UnrealEditor-Cmd.exe "
EditorIOPort = "54689" cmd = f"-set:ProjectName={ProjectName} -set:ProjectDir={ProjectDir} -set:Platform={Platform}" \
f" -set:ClientConfig={ClientConfig} -set:OutputDir={OutputDir} -set:SkipBuildProject={SkipBuildProject}" \
f" -set:SkipBuildEditor={SkipBuildEditor} -set:Unrealexe={Unrealexe} -set:EditorIOPort={EditorIOPort}" fileDir = r"E:\UE\UE_4.27_Source\UnrealEngine\Engine\Build\BatchFiles\RunUAT.bat"
target = "MyBuild"
script = r"E:\AllProject\UE_5_2_0\BuildTest\BuildTools\Build.xml" cmd = f"{fileDir} BuildGraph -Script={script} -Target={target} {cmd}" print(f"cmd: {cmd}") ret = os.system(cmd) if ret == 0:
print(f"run build ret val = {ret}")
else:
raise Exception("project build faild!")
pass if __name__ == "__main__":
main(sys.argv[1:])
input("press any to close")

这个py主要是拼接了参数到命令里面,方便配置命令。命令拼接好后拉起RunUAT.bat运行BuildGraph命令并传递命令参数。

注意target是我们后面Build.xml脚本里的MyBuild那个Agent

cmd: 打印了拼接的命令。

BuildGraph脚本Build.xml

<?xml version='1.0' ?>
<BuildGraph xmlns="http://www.epicgames.com/BuildGraph" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.epicgames.com/BuildGraph ../../Engine/Build/Graph/Schema.xsd">
<!-- Base Options -->
<Option Name="ProjectName" DefaultValue="" Description="project path like D:\UEProj\BuildTest\BuildTest.uproject" />
<Option Name="ProjectDir" DefaultValue="" Description="for run BuildGraph scripts uproject, same as ProjectPath usually" />
<Option Name="Platform" DefaultValue="" Description="target platform like Windows, Android, IOS and so on"/>
<Option Name="ClientConfig" DefaultValue="Development" Description="config like Debug, Development, Shipping" />
<Option Name="OutputDir" DefaultValue="" Description="" />
<Option Name="SkipBuildProject" DefaultValue="true" Description="skip build project default = true" />
<Option Name="SkipBuildEditor" DefaultValue="true" Description="skip build editor default = true " />
<Option Name="Unrealexe" DefaultValue="" Description="like UnrealEngine\Engine\Binaries\Win64\UnrealEditor-Cmd.exe" />
<Option Name="EditorIOPort" DefaultValue="64752" Description="ensure the port unuse" /> <!-- Advance Options-->
<Option Name="WithClean" DefaultValue="false" Description="clean before build" />
<Option Name="WithCook" DefaultValue="true" Description="cook assets" /> <Property Name="ProjectFullName" Value="$(ProjectDir)$(ProjectName).uproject" /> <!-- Base -->
<Property Name="BaseCmd" Value="-project=$(ProjectFullName) -ScriptsForProject=$(ProjectFullName)" /> <!-- Check SDK Command -->
<Property Name="CheckSDKCmd" Value="Turnkey -command=VerifySdk -platform=Android -UpdateIfNeeded" If="$(Platform) == Android" /> <!-- Editor IO Command -->
<Property Name="EditorIOCmd" Value="-EditorIO -EditorIOPort=$(EditorIOPort)" /> <!-- Sub Command -->
<Property Name="CleanCmd" Value="" />
<Property Name="CleanCmd" Value="-clean" If="$(WithClean)" /> <Property Name="HeadCmd" Value="BuildCookRun -project=$(ProjectFullName) -target=BuildTest -platform=$(Platform)" />
<Property Name="HeadCmd" Value="$(HeadCmd) -cookflavor=ASTC" If="$(Platform) == Android" />
<Property Name="HeadCmd" Value="$(HeadCmd) -prereqs -nop4 -utf8output -Unrealexe=$(Unrealexe)" /> <Property Name="BuildCmd" Value="-build -clientconfig=$(ClientConfig)" />
<Property Name="BuildCmd" Value="$(BuildCmd) -nocompile -nocompileuat" If="$(SkipBuildProject)" />
<Property Name="BuildCmd" Value="$(BuildCmd) -nocompileeditor -skipbuildeditor" If="$(SkipBuildEditor)" /> <Property Name="CookCmd" Value="-cook -iostore -compressed" />
<Property Name="CookCmd" Value="$(BuildCmd) -skipcook" If="$(WithCook) == false" /> <Property Name="PakCmd" Value="-pak" /> <Property Name="StageCmd" Value="-stage" /> <Property Name="PackageCmd" Value="-package" /> <Property Name="ArchiveCmd" Value="-archive -archivedirectory=$(OutputDir)" /> <!-- Client Command -->
<Property Name="ClientCmd" Value="$(BaseCmd) $(CheckSDKCmd) $(EditorIOCmd) $(HeadCmd) $(BuildCmd) $(CookCmd) $(PakCmd) $(StageCmd) $(PackageCmd) $(ArchiveCmd)" /> <!-- Build -->
<Agent Name="MyBuild" Type="BuildOnWindows">
<Node Name="MyBuildNode">
<Log Message="BuildCookRun with arguments: $(ClientCmd)" />
<Command Name="BuildCookRun" Arguments="$(ClientCmd)" />
</Node>
</Agent> </BuildGraph>

这个脚本就是进行根据条件拼接BuildCookRunUAT命令,它的参数可以在上一章的使用UAT打包构建的命令中找到(也可以参考后面示例的输出日志)。

BuildGraph 的命令的Target是MyBuild,MyBuild执行了BuildCookRun这个Command并把拼接命令传递过去。

日志和执行结果

日志



圈出的地方分别是py和Build.xml输出的命令行

执行结果



结语

  • 在打包的时候使用BuildGraph这一步不是必须的,完全可以直接使用py拼接BuildCookRun的命令,拉起UAT执行。不过BuildGraph在构建Editor时因为有现成的脚本会更方便些。
  • 这是在UE5.20环境下测试的,在UE4上应该是大同小异的
  • 这个是基于基本打包命令实现的,实际生产环境会控制更多的参数以及其他一些定制化的修改

UE构建基础和实践:四、使用脚本打包的更多相关文章

  1. 7.云原生之Docker容器Dockerfile镜像构建浅析与实践

    转载自:https://www.bilibili.com/read/cv15220707/?from=readlist Dockerfile 镜像构建浅析与实践 描述:Dockerfile是一个文本格 ...

  2. Gradle笔记——构建基础

    本篇文章主要介绍一下Gradle的构建基础. 它看起来似乎和android项目没多大关系.不能让人一下子理解android项目中的Gradle配置文件,可是这篇基础真的非常重要. 学习Gradle前, ...

  3. 从头开始学gradle【Gradle 构建基础】

    构建基础 Project 和 task:projects 和 tasks是 Gradle 中最重要的两个概念. 任何一个 Gradle 构建都是由一个或多个 projects 组成.每个 projec ...

  4. IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token

    本文引用了简书作者“骑小猪看流星”技术文章“Cookie.Session.Token那点事儿”的部分内容,感谢原作者. 1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动 ...

  5. nodejs 实践:express 最佳实践(四) express-session 解析

    nodejs 实践:express 最佳实践(四) express-session 解析 nodejs 发展很快,从 npm 上面的包托管数量就可以看出来.不过从另一方面来看,也是反映了 nodejs ...

  6. Vue基础系列(四)——Vue中的指令(上)

    写在前面的话: 文章是个人学习过程中的总结,为方便以后回头在学习. 文章中会参考官方文档和其他的一些文章,示例均为亲自编写和实践,若有写的不对的地方欢迎大家和我一起交流. VUE基础系列目录 < ...

  7. Vue2+VueRouter2+webpack 构建项目实战(四)接通api,先渲染个列表

    Vue2+VueRouter2+webpack 构建项目实战(四)接通api,先渲染个列表:  Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(一)基础知识概述

  8. 前端构建大法 Gulp 系列 (四):gulp实战

    前端构建大法 Gulp 系列 (一):为什么需要前端构建 前端构建大法 Gulp 系列 (二):为什么选择gulp 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gulp专家 前 ...

  9. Bootstrap<基础二十四> 缩略图

    Bootstrap 缩略图.大多数站点都需要在网格中布局图像.视频.文本等.Bootstrap 通过缩略图为此提供了一种简便的方式.使用 Bootstrap 创建缩略图的步骤如下: 在图像周围添加带有 ...

  10. Perl,Python,Ruby,Javascript 四种脚本语言比较

    Perl 为了选择一个合适的脚本语言学习,今天查了不少有关Perl,Python,Ruby,Javascript的东西,可是发现各大阵营的人都在吹捧自己喜欢的语言,不过最没有争议的应该是Javascr ...

随机推荐

  1. 笔记:设置redhat 7.2 默认root用户启动以及网络服务自启动

    笔记:设置redhat 7.2 默认root用户启动以及网络服务自启动 1.root用户启动    root用户下打开 /etc/gdm/custom.conf文件,添加字段如下:    [daemo ...

  2. Python-BeautifulReport的简单使用

    一.简介 BeautifulReport.report report ( filename -> 测试报告名称, 如果不指定默认文件名为report.html description -> ...

  3. Centos7.x 安装Chrome + Chrome driver

    一.安装Chrome 1.执行下面命令进行安装操作 yum install https://dl.google.com/linux/direct/google-chrome-stable_curren ...

  4. 大话AI绘画技术原理与算法优化

    引子 博主很长一段时间都没有发文,确实是在忙一些技术研究. 如标题所示,本篇博文主要把近段时间的研究工作做一个review. 看过各种相关技术的公关文章,林林总总,水分很多. 也确实没有多少人能把一些 ...

  5. 【解决方法】windows连接域时报错:An Active Directory Domain Controller(AD DC) for the domain“chinaskills.com“....

    目录-快速跳转 问题描述 原因分析: 解决方案: 附言: 问题描述 操作环境与场景: 在 VM 内 windos 2019 在连接到域时,提示报错: An Active Directory Domai ...

  6. 2023-03-06:给定一个二维网格 grid ,其中: ‘.‘ 代表一个空房间 ‘#‘ 代表一堵 ‘@‘ 是起点 小写字母代表钥匙 大写字母代表锁 我们从起点开始出发,一次移动是指向四个基本方向之

    2023-03-06:给定一个二维网格 grid ,其中: '.' 代表一个空房间 '#' 代表一堵 '@' 是起点 小写字母代表钥匙 大写字母代表锁 我们从起点开始出发,一次移动是指向四个基本方向之 ...

  7. 2022-07-14:以下go语言代码输出什么?A:1;B:3;C:4;D:编译错误。 package main import ( “fmt“ ) func main() { a

    2022-07-14:以下go语言代码输出什么?A:1:B:3:C:4:D:编译错误. package main import ( "fmt" ) func main() { a ...

  8. 2022-04-14:小美有一个长度为n的数组, 为了使得这个数组的和尽量大,她向会魔法的小团进行求助。 小团可以选择数组中至多两个不相交的子数组, 并将区间里的数全都变为原来的10倍。 小团想知道他

    2022-04-14:小美有一个长度为n的数组, 为了使得这个数组的和尽量大,她向会魔法的小团进行求助. 小团可以选择数组中至多两个不相交的子数组, 并将区间里的数全都变为原来的10倍. 小团想知道他 ...

  9. 2021-08-19:超级洗衣机。假设有 n 台超级洗衣机放在同一排上。开始的时候,每台洗衣机内可能有一定量的衣服,也可能是空的。在每一步操作中,你可以选择任意 m (1 ≤ m ≤ n) 台洗衣机,

    2021-08-19:超级洗衣机.假设有 n 台超级洗衣机放在同一排上.开始的时候,每台洗衣机内可能有一定量的衣服,也可能是空的.在每一步操作中,你可以选择任意 m (1 ≤ m ≤ n) 台洗衣机, ...

  10. C# 实现 Linux 视频会议(源码,支持信创环境,银河麒麟,统信UOS)

    信创是现阶段国家发展的重要战略之一,面对这一趋势,所有的软件应用只有支持信创国产化的基础软硬件设施,在未来才不会被淘汰.那么,如何可以使用C#来实现支持信创环境的视频会议系统吗?答案是肯定的. 本文讲 ...