ue4打包问题的巧妙解决——二分回退大法!

昨天突然发生了一件非常恐怖的事——我的ue4项目居然不能打包了!!

大概是这么一回事:

 UATHelper: 打包 (Windows (64位)): UnrealBuildTool: ERROR: Non-editor build cannot depend on non-redistributable modules

我试了一下在vs里用development而不是developmenteditor生成结果出现了这么一说:

于是我大概猜测到应该和非编辑器build模式(也就是打包)不能依赖于umgeditor有关的不可再发行模块。

但具体要怎么解决还是无从下手,我尝试了删掉临时文件重新generate code,rebuild项目都没卵用,根据unreal wiki上的问答把build.cs文件魔改了一通也没能成功。。

于是二分回退大法就要闪亮登场了!

众所周知,程序员除了print111111大法以外,还有一项独门秘技,叫做二分查错法。

也就是一段程序有问题但不知道问题在哪里的时候,注释掉后半段看看还有没有问题,如果不出错了说明问题在后半段反之问题在前半段,以此类推,不断缩小范围。。。直到找出有问题的行。

二分查错法的升级版是我独创的(?)二分优化法,如果游戏出现蜜汁卡顿,(前提是先确定是逻辑线程耗时过长)同样是先注释掉一大段代码,用二分法不断缩小范围,直到找到卡顿的代码行。

然而现在又有升级版了,叫做二分回退大法!可以解决一些非常严重但就是找不到原因的问题。

二分回退法和传统的二分法不同,它是时间上的二分而不是空间的。

首先我们需要有时不时提交到版本控制的好习惯,我用的是微软的vsonline team foundation service,具体怎么和ue4结合进行源码管理我以后会单独写篇文章介绍。

具体做法就是把项目回退到记忆中可以打包的版本(l表示),然后取当前版本已知不可打包版本(r表示)到当前已知可打包版本的一半(时间上的一半,(l+r)/2)再进行回退,尝试打包,如果不能打包说明导致不能打包的那次修改的范围在l~(l+r)/2,否则在(l+2)/2~r。。。

以此类推,最终我发现了changeset 375可以正常打包,而之后的376突然就打包失败了!!

真相就在眼前!!!

我点开#376,

赫然看到uproject文件多出了一行umgeditor!!!

尼玛,这不就是前面那个link出错的umgeditor什么什么lib文件嘛!!!

震惊了,原来是uproject多了这么一行导致打包需要多弄这么个模块。

于是我又回到了最新版本,把uproject文件用记事本打开,删掉了umgeditor这行,果然伴随着清脆的一声滴,打包成功了!!!

至于为什么会莫名其妙多出这一行呢,原来是我当时试图添加一个继承widgetcomponent的c++类,结果没能添加成功,我也就没当一回事,没想到埋下了如此伏笔。

所以这个故事告诉了我们至少3点:

1.如果ue4打包失败就去检查一下.uproject文件

2.使用版本控制并经常check in 的好处

3.二分回退大法的妙用

时间: 2024-10-17 19:42:48

ue4打包问题的巧妙解决——二分回退大法!的相关文章

Java项目打包工具安装失败解决方法

在学习Java的时候我们打包项目但遇到如下情况:(提示没有找到java的运行环境!) 网上目前有两中的解决方案: (1)选择本地jdk环境; (2)下载Download 但是第一种选择本地老是失败(方法:点Locate找到你机器上已安装的JDK目录下/bin/java.exe就可以进行安装了) 目前我还没有解决的(如果成功的话,算你走运) 然后使用第一种但是下载的时候也是不能下载,解决方法.,换一个软件在重试,下载地址:http://www.pc6.com/softview/SoftView_6

UE4打包报错"Assertion failed: PerInstanceRenderData.IsValid()"

---------------------------------------------------------------未完---------------------------------------------------------------------- 在将旧工程从UE4.22升级到4.23后,打包工程时提示:Assertion failed: PerInstanceRenderData.IsValid(). 可能引起的原因是有些资源丢失.但多数可能是因为Level中的资源引起

[BZOJ1271][WC2008]秦腾与教学评估(巧妙的二分)

题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1271 分析: 很巧妙的一道题 因为最多只有一个点是奇数,所以说明这个点前面的前缀和都是偶数,后面的前缀和都是奇数. 所以可以按照前缀和来二分 对于mid,如果Mid的前缀和为奇数,那么往前找,如果mid的前缀和为偶数,那么往后找

求多个区间合并后区间大小的巧妙解决方法【差分】

上图一共有5个区间,分别是[0,2].[2,4].[8,11].[7,11].[15,18].如果要求这些区间合并后区间的大小,有两种简单的方法. 方法一:比较每两个区间的范围,如果两个区间有交集,则合并它们.最后所有区间会合并成几个离散的大区间,结果为这些区间大小之和.这种方法的时间复杂度是O(n^2). 方法二:使用一个可以覆盖所有区间范围的数组,对每个区间进行标记,结果为数组中被标记元素的个数.这种方法的时间复杂度是O(nm). 注:n是区间个数,m是所有区间总的范围. 如果n和m都比较大

react-native-cli运行项目及打包apk失败的解决过程

刚开始学习react native,第一步自然是搭建好开发环境,node及jdk本身就有,Python2.Android studio以及Android sdk的安装倒是没什么大问题,按照官网的教程做就行了,还有Android studio我目前理解的是其实主要作用就是配置对应版本的安卓模拟器或者是安装sdk比较方便, 不过在项目正确跑起来之前确实也碰到一些问题,这里把自己的解决经历记录下来 问题一:react-native run-android的时候在download gradle的时候等了

vue项目打包之后页面空白解决办法

之前项目遇到个情况,npm run build打包之后上传到服务器后,index.html打开一片空白,资源都加载了,但是就是不显示. 然后百度找了原因,修改了两处地方 一.修改 assetsPublicPath 在config/index.js里面,有个 assetsPublicPath 属性,源码是'/',修改成'./',加个点 assetsPublicPath: '/',二.路由模式将histroy改成hash模式,起初 mode:'history' const router = new

vue-cil 打包爬坑(解决)

1.打包成功不报错,但是打开页面啥都没有? 解决:文件位置:config目录下index.js文件更改assetsPublicPath属性:文件里面有两个assetsPublicPath属性,也就是更改build里面的assetsPublicPath属性:(加上点) assetsPublicPath:'/'替换成 assetsPublicPath:'./' 2.打包完成后某些图片没加载出来,f12提示404,且dist文件下的static文件夹下有一个img文件夹? 原因:图片过大或者资源文件过

巧妙解决百度云管家下载速度慢

经常从百度云盘下载东西的用户都知道,使用百度云盘下载文件超过2GB的就要必须要用百度云管家来下载了,更坑爹的是本来下载速度非常快的东西,用百度云管家下载速度就会变得比较慢,据说是百度云管家限速了,如遇到要下载比较大的文件,真的是要考验用户的耐心了.下面就介绍如何绕过百度云管家使用其他工具下载,以解决云管家下载慢的问题. 至于什么用以前的老版本不限速 纯属扯淡. 先登录自己的百度云盘:pan.baidu.com,然后进入要下载的资源的百度云分享下载页面,点击“保存至网盘”,将要下载的文件转存至自己

Html5 localstorage解决Ajax回退的坑

A页面通过ajax加载数据,并且是滚动加载效果,当滚动几个屏幕之后,进入新的链接页面B,再返回到A的时候,A页面的数据有需要重新加载,从头开始了,体验非常不好. 解决办法:1)hash:2)html5的history特性:3)localstorage/cookie等,综合而看localstorage是最简单的,不需要引入其他东西,简单改造即可实现. //重置页面环境 function resetStatus() { var oldStatus = window.localStorage.getI