UE4 Cook 从UAT传递参数给UE4Editor
需求
一句Cook的命令如下:
${EnginePath}/Engine/Build/BatchFiles/RunUAT.sh BuildCookRun -project=${ClientPath}/${ProjectName}.uproject -noP4 -platform=IOS -cooksinglepackage -client -clientconfig=${CookConfig} -iterate -skipbuild -nocompile -NoMutex -cook -DisableUnsolicitedPackages -DisableCrashPackageReport -FastCook -SkipCookingEditorContent -skippak -skipstage -skipdeploy -ignorejunk -buildmachine -manifests -prereqs ${PARAM_IGNORE_COOK_ERRORS} ${SHADER_COMPRESS} -AdditionalCookerOptions="-IgnoreIniSettingsOutOfDate -DisableUnsolicitedPackages" -log=${ClientPath}/Saved/CookLog.log
如果我想要给它添加一个开关 -DisableCookAssert,并传递给UE4Editor(cpp)中,如下

(图1)
应该怎么添加?怎么传递呢?
RunUAT.sh
拿iOS中的 Engine\Build\BatchFiles\RunUAT.sh 来举例,其中的核心脚本是:
# you can't set a dotted env var nicely in sh, but env will run a command with
# a list of env vars set, including dotted ones
echo Start UAT: mono AutomationTool.exe "${Args[@]}"
env uebp_LogFolder="$LogDir" mono AutomationTool.exe "${Args[@]}" $UATCompileArg &
UATPid=$!
wait $UATPid
UATReturn=$?
它的语法和含义如何
- env uebp_LogFolder="$LogDir" mono AutomationTool.exe "${Args[@]}" $UATCompileArg &:
- env:这个命令用于运行另一个程序,同时设置环境变量,而不改变当前的环境。
- uebp_LogFolder="$LogDir":这是设置的环境变量,uebp_LogFolder是环境变量的名称,$LogDir是它的值,这个值应该是之前在脚本中定义的变量。
- mono AutomationTool.exe "${Args[@]}" $UATCompileArg:这部分与上面的命令相同,但是这次它将在设置了uebp_LogFolder环境变量后执行,并且添加了一个额外的参数$UATCompileArg。
- &:这个符号告诉shell在后台运行这个命令,这样它就不会阻塞当前shell,可以继续执行后续命令。
- UATPid=$!:
- $!:这个特殊的变量代表最近一个后台命令的进程ID(PID)。
- UATPid=$!:这条命令将后台运行的进程的PID赋值给变量UATPid,以便后续可以引用或等待该进程。
- wait $UATPid:
- wait:这个命令会等待指定的进程ID结束。
- $UATPid:这是之前保存的后台进程的PID。
- 这条命令将阻塞shell,直到由UATPid变量指定的进程结束。
- UATReturn=$?:
- $?:这个特殊变量包含了最后一条命令的退出状态(返回码)。
- UATReturn=$?:这条命令将最后一条命令(这里是wait命令)的退出状态保存到变量UATReturn中。由于wait命令返回的是它等待的进程的退出状态,所以UATReturn将包含mono AutomationTool.exe命令的退出状态。
调试AutomationTool.exe
参考 UE4如何调试BuildCookRun_ue 的 automationtool如何debug-CSDN博客
BuildCookRun的调用关系

${EnginePath}/Engine/Build/BatchFiles/RunUAT.sh BuildCookRun 实际上将会调用下面若干个步骤:
1、Project.Build()
编译
由 -build / -skipbuild 决定
2、Project.Cook()
资源Cook
由 -cook / -skipcook 决定
3、Project.CopyBuildToStagingDirectory()
也就是Stage的步骤,也是简单的拷贝
由 -stage / -skipstage 决定
4、Project.Package()
由 -package / -skippackage 决定
包括NDK-Build,打包成Apk
5、Project.Archive()
很简单的拷贝,存放到某个Archive目录下
由 -archive / -skiparchive 决定
6、Project.Deploy()
安装apk,实际上构建里没有走这一步骤
由 -deploy / -skipdeploy 决定
7、Project.Run()
由 -run / -skiprun 决定
众所周知,一个 SomeXXCommand.cs 在执行
让我们一起来找找传参的过程。Project.Build()中的Params截图,供参考:

继续往下看,Project.Cook() :


一、UAT调用传递给 CookCommandlet()方法,将会调用UE4Editor-cmd.exe
二、IgnoreCookError功能的生效原理是给 CookCommandlet()方法 包一下try catch并在catch中放弃处理Cook Failure。IgnoreCookError功能并不直接体现在UE4Editor的cpp功能中。

三、DisableCookAssert 需要在cpp中解析参数,和 IgnoreCookError功能的生效原理 有所不同。见图1
四、修改建议:此处补充传递DisableCookAssert

调试与验证
按照前面提到的 “调试AutomationTool.exe” 章节,填写 -DisableCookAssert 传参,并断点,查看console中的日志以便确认效果。
相关文章:
UE4 Cook 从UAT传递参数给UE4Editor
需求 一句Cook的命令如下: ${EnginePath}/Engine/Build/BatchFiles/RunUAT.sh BuildCookRun -project${ClientPath}/${ProjectName}.uproject -noP4 -platformIOS -cooksinglepackage -client -clientconfig${CookConfig} -iterate -skipbuild -nocompile -NoMutex…...
【学习日记】notebook添加JAVA支持
作者是个大学生 这个专栏主要收集课时常用的软件 以及女朋友上课用的软件的教程 新开了gitcode 用于上传安装包 环境说明 windows11 java23.0.1 ijava1.1.2 Anaconda-2024.02 需提前配置好java环境 本篇仅对添加支持进行说明 ijava的GitCode链接NotebookAddsSupportForJava:no…...
以太坊系地址衍生算法分层确定性生成逻辑
文章目录 一、前言1.1 衍生算法生成的私钥1.2 随机生成的私钥二、私钥生成及私钥提取2.1 golang如何使用衍生算法生成私钥,然后为用户生成地址2.1.1 实现步骤2.1.2 golang代码示例2.1.3 代码说明2.2 地址交易时,如何提取地址私钥2.2.1 私钥恢复说明2.2.2 golang代码通过助记词…...
【Unity】ScriptableObject的应用:利用配方合成新物体
前一篇已经使用ScriptableObject(SO)类配置可放置物体,本篇探索更多的SO类应用场景。 需求分析 将若干指定物体放在工作台上,可以生成新的物体。 成果展示 Scene部分 准备工作台,放在工作台上的物体全部放在指定PlacedObjects空物体下。 …...
31DNS设置
每天五分钟学Linux | 第三十一课:DNS设置 大家好!欢迎再次来到我们的“每天五分钟学Linux”系列教程。在前面的课程中,我们学习了如何配置Linux系统的IP地址。今天,我们将探讨如何设置DNS(域名系统)&#…...
使用Docker快速部署FastAPI Web应用
Docker是基于 Linux 内核的cgroup、namespace以及 AUFS 类的Union FS 等技术,对进程进行封装隔离,一种操作系统层面的虚拟化技术。Docker中每个容器都基于镜像Image运行,镜像是容器的只读模板,容器是模板的一个实例。镜像是分层结…...
全面掌握Spring Boot异常处理:策略与实践
标题:全面掌握Spring Boot异常处理:策略与实践 引言 在Spring Boot应用开发中,异常处理是一个关键环节,它不仅关系到应用的稳定性,也直接影响用户体验。本文将详细介绍如何在Spring Boot中实现异常处理,包…...
【LeetCode】【算法】11. 盛最多水的容器
LeetCode 11. 盛水最多的容器 题目描述 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 思…...
ES6代理和反射新特性,详细讲解
代理与反射 es6新增了代理和反射特性,这两个特性为开发者提供了拦截并向基本操作嵌入额外行为的能力。 代理基础 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta charset"UTF-8"&g…...
vue计算属性 初步使用案例
<template><div><h1>购物车</h1><div v-for"item in filteredItems" :key"item.id"><p>{{ item.name }} - {{ item.price }} 元</p><input type"number" v-model.number"item.quantity"…...
大模型时代,呼叫中心部门如何建设一套呼出机器人系统?
大模型时代,呼叫中心部门如何建设一套呼出机器人系统? 作者:开源呼叫中心系统 FreeIPCC,Github地址:https://github.com/lihaiya/freeipcc 在大模型时代,呼叫中心部门建设一套呼出机器人系统需要综合考虑技…...
使用Java绘制图片边框,解决微信小程序map组件中marker与label层级关系问题,label增加外边框后显示不能置与marker上面
今天上线的时候发现系统不同显示好像不一样,苹果手机打开的时候是正常的,但是一旦用安卓手机打开就会出现label不置顶的情况。尝试了很多种办法,也在官方查看了map相关的文档,发现并没有给label设置zIndex的属性,只看到…...
力扣 LeetCode 142. 环形链表II(Day2:链表)
解题思路: 使用set判断是否重复添加,如果set加入不进去证明之前到达过该节点,有环 public class Solution {public ListNode detectCycle(ListNode head) {Set<ListNode> set new HashSet<>();ListNode cur head;while (cur …...
用MVVM设计模式提升WPF开发体验:分层架构与绑定实例解析
MVVM(Model-View-ViewModel)是一种架构模式,广泛应用于现代前端开发,尤其是在微软的WPF(Windows Presentation Foundation)应用程序中。它旨在通过将视图(UI)与业务逻辑(…...
C++中的动态断言和静态断言
C中包含动态断言(assert)和静态断言(static_assert),下面分别分析各自的用法。 1.动态断言(assert) assert 是一个宏,在预处理阶段不生效,在运行阶段才起作用࿰…...
运算放大器的学习(一)输入阻抗
输入阻抗 最近需要对运算放大器进行学习,我们后面逐一对其参数进行了解。 首先了解下输入阻抗。 放大电路技术指标测试示意图: 输入电阻: 从放大电路的输入端看进去的等效电阻称为放大电路的输入电阻,如上图,此处考虑…...
Rust枚举之卧龙凤雏(Rust Option枚举、Rust Result枚举)(Rust Enum、Some(T)、Ok(T)、Err(E))链式操作
文章目录 Rust 枚举之卧龙凤雏枚举的基本概念枚举定义示例 Result 枚举:凤雏Result 枚举的定义Result 的使用场景示例 1:文件读取示例 2:链式操作与错误处理 Option 枚举:卧龙Option 枚举的定义Option 的使用场景示例 1࿱…...
TCP/IP协议,TCP和UDP区别
TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/互联网协议)是一组用于计算机网络中的通信协议,它为数据传输提供了标准框架,广泛用于互联网和局域网中。TCP/IP协议包括多个层次,每…...
【go从零单排】Timer、Epoch 时间函数
🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 在 Go 语言中,time.Timer 是一个用于在指定时间后执行操作的计时器。…...
壁仞科技上市前最后一波 校招 社招 内推
随着美国大选结束,国内GPU 产业得到空前的的发展空间,国内芯片相关股票一片飘红。 国内大型 GPU厂商壁仞科技,摩尔线程等正紧锣密鼓地加紧上市。 GPGPU 芯片赛道来到了史无前例的红利点,抓住机会💪 壁仞科技正在火热…...
FLUX.1-dev FP8低显存优化版终极指南:破解大模型部署难题
FLUX.1-dev FP8低显存优化版终极指南:破解大模型部署难题 【免费下载链接】flux1-dev 项目地址: https://ai.gitcode.com/hf_mirrors/Comfy-Org/flux1-dev 在AI图像生成领域,显存限制一直是开发者面临的核心挑战。当主流模型动辄需要24GB以上显存…...
如何快速在Windows上安装安卓应用?APK Installer的终极免费解决方案
如何快速在Windows上安装安卓应用?APK Installer的终极免费解决方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾想在Windows电脑上运行安卓应用…...
HarmonyOS APP<<古今职鉴定>>开源教程第20篇:农历日期与节日计算
本篇学习农历算法,实现年俗内容的日期驱动图:农历日期与节日计算 的关键流程与实现要点。 学习目标 完成本篇后,你将能够: ✅ 理解农历算法原理✅ 实现公历转农历✅ 计算传统节日✅ 实现年俗日期匹配 预计学习时间 约 90 分钟…...
5分钟让你的Python应用拥有Windows 11专业界面:py-window-styles完全指南
5分钟让你的Python应用拥有Windows 11专业界面:py-window-styles完全指南 【免费下载链接】py-window-styles Customize your python UI window with awesome pre-built windows 11 themes. 项目地址: https://gitcode.com/gh_mirrors/py/py-window-styles 还…...
自动化测试常用函数(操作测试对象)
上一篇我们学会了怎么用Selenium定位页面元素,接下来就是要对元素进⾏操作了。常⻅的操作有点击、提交、输⼊、清除、获取⽂本。点击:元素.click()输入:元素.send_keys("内容")清空:元素.clear()拿标签间文字:元素.text…...
社保照片怎么手机搞定?社保照片要求有哪些?2026手机拍摄社保照片完整指南
社保办理、医保激活、养老金申请……这些民生相关的事务都离不开一张正式的证件照。很多人以为必须去照相馆花钱拍摄,但其实用手机就能完全搞定。无论是首次办理社保还是证件过期更新,这篇教程都能帮你省时省钱,拍出符合社保部门要求的标准照…...
收藏! Harness 让你轻松驾驭大模型,小白也能写出高效代码
本文探讨了 AI 编程 Agent 的核心要素,强调 Harness(工具、流程和反馈系统)的重要性远超单纯依赖模型。通过实例说明,优化编辑格式等 Harness 设计可显著提升 Agent 成功率。文章提出,为 AI 准备更好的工作台ÿ…...
如何用QKeyMapper在5分钟内搞定Windows设备按键映射:终极免费解决方案
如何用QKeyMapper在5分钟内搞定Windows设备按键映射:终极免费解决方案 【免费下载链接】QKeyMapper [按键映射工具] QKeyMapper,Qt开发Win10&Win11可用,不修改注册表、不需重新启动系统,可立即生效和停止。支持游戏手柄映射到…...
Box64终极指南:如何在ARM设备上轻松运行x86程序?三个简单步骤解锁无限可能
Box64终极指南:如何在ARM设备上轻松运行x86程序?三个简单步骤解锁无限可能 【免费下载链接】box64 Box64 - Linux Userspace x86_64 Emulator with a twist, targeted at ARM64, RV64 and LoongArch Linux devices 项目地址: https://gitcode.com/gh_m…...
暗黑破坏神2存档编辑器终极指南:5分钟掌握Diablo Edit2核心功能
暗黑破坏神2存档编辑器终极指南:5分钟掌握Diablo Edit2核心功能 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit 你是否曾经因为暗黑破坏神2中角色技能点分配失误而苦恼?是否…...
