• 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+r)/2~r。。。

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

    真相就在眼前!!!

    我点开#376,

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

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

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

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

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

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

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

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

    3.二分回退大法的妙用

  • 相关阅读:
    Tushare模块
    关于上下文
    Flask的session使用
    Flask的请求处理机制
    Tomcat启动报错:SERVER: Error ListenerStart 排查过程记录
    Extjs中设置只读的样式问题
    Extjs中获取getEl获取undefined的问题
    【转载】使用SoapUI 测试Web Service
    PLSQL快捷键设置
    PLSQL配置数据库的方式
  • 原文地址:https://www.cnblogs.com/wzj998/p/6985016.html
Copyright © 2020-2023  润新知