浅谈UE4项目打包中遇到的几个问题

来源:互联网 发布:巨人网络数据分析 编辑:程序博客网 时间:2024/06/10 05:57

前言

闲言少叙,直接进入主题。针对问题,说解决方案。

打包准备

打包时需要cook所有材质、纹理,所以如果有没有使用到的资源assets,最好删除掉。但是删除的时候一定要注意,不要有任何其他资源引用了它。

生成 sln 文件

如果能顺利打包,那就不在本文的讨论范围内了。如果不能顺利打包,通常会有很多提示,如图所示,大概总结为“AutomationTool exiting with ExitCode = n”,这里常见的 n 值有 1,5,25等。
这里写图片描述
这里,里面提到了已具备了相同键的项,具体的错误原理还不太清楚,但是通过给纯蓝图项目添加C++类以促使其生成sln文件,的确解决了这一步的错误。

添加 C++ 类

如果不能顺利打包的话,首先需要考虑的是,是不是以蓝图为模板的项目,并且从未添加过 C++ 类,如果是的话,试着在项目中添加一个新的 C++ 类,空类、Actor类、Pawn类等等都行。 但是估计很快就会发现,添加失败。大概会提示说,
这里写图片描述

遇到这种问题,我们可以尝试做以下几种操作。
首先,来到项目所在的文件夹,如下图所示,可能在未成功生成sln文件时,你所看到的项目文件夹的内容比这些少几个,但是那不是重点。重点是红色框线圈出的这几个文件夹:Binaries,Intermediate,Saved等文件都是可以删除的,是不影响项目的。
这里写图片描述
删除这些文件夹后,使用txt或者Notepad打开 .uproject 文件,可以将其中的“Modules”整个删除掉,然后再尝试添加C++类。
在这里,可以看到下面的“Plugins”部分,特别是经常会有一些项目可能之前在机器A上打开过,并且带上了GameAnalytics或者其他插件,而机器B上没有这个插件,也并不需要这个插件,此时,删除掉地下这坨GameAnalytics的大括号内容即可避免每次打开项目时弹出的插件不存在对话框。
这里写图片描述
当成功地创建了C++类之后,打开.sln文件,使用VS进行Build,Build成功后再进行UE4中的打包基本就没有什么问题了。

ExitCode25,Cook错误

UE4的打包分为四五部分,其中第一步是对所有 asset 进行 cook。在这一步,UE4 会对几乎所有的 处于 Content 中的文件及其中的所有内容进行处理,无论你是否是用到了它,或者无论你是否在蓝图中断开了那个节点的输入,都会报错 Error 或者 Warning。 因此,在制作程序的过程中,尽量不要留下一些不用的错误(蓝图)代码。虽然你断开了它的输入(驱动输入),但是在打包过程中仍然会出错。

这里写图片描述

这个图片显示了当打包自动化程序错误,未能成功打包,并返回为错误代码25的情况。这种情况是 UE4 在打包过程中,Cook的过程中有一些错误,尤其是 Error。网上找几行,我们就可以看到一个 “Failure - 107 error(s), 2379 warning(s)”。再往上找,我们就可以看到每一条的Warning和Error信息,然后逐条修复,这个过程类似于在VS中编程后Build然后出现了Error和Warning,同样的,Warning可以不理会,但是最好能修复。
这里写图片描述

再向上找,我们可以看到一个 Summary,这里面一条条地列举了所有的Error和Warning。我们需要一条条修复。
UE4提供了比VS更多的修复提示,如

No parent instance found for this SubstanceTexture2D (SubstanceTexture2D /Game/Material/island/Surface/Grass/Grass__Middle_INST_roughness.Grass__Middle_INST_roughness). You need to delete
这是因为 Substance 插件制作的贴图出现了问题,我们可以把它删除,因为这个贴图的确在工程中没有使用到。如果有使用到的话,我们可以相对应地,给它替换一个贴图。

Error: Impossible to find parent package for “Grass__Middle_INST6”. You should delete the object.

这也是个材质问题。删除,或者给使用了该材质的对象替换材质。

LogBlueprint:Error: Compiler Error Spawn node Create Widget must have a class specified. from Source: /Game/UI/HUD/gameHUD.gameHUD

这个是蓝图中的错误,当我打开这个蓝图时发现上面的Compile是错误的,就是红色禁止图标。然后根据蓝图编译提示的错误,做了适当的修复。嗯,这个错误是因为在开发过程中这个蓝图并没有使用到,但是编译出错了,也是不行的。

Error: Compiler Error The property associated with Damageing could not be found from Source: /Game/UI/Damaged/UI_Damage.UI_Damage

这个也是个蓝图错误,打开提示中的那个蓝图就可以很清楚的看到,一个变量是无效的。这个,唉,做 UI 的用到了游戏中的角色的某个属性,而角色程序员并未提供 Get 函数,直接把那个属性变量 public 暴露给 UI 进行调用,后面他修改程序的时候又把那个变量给删除了。。。。啊。。。。心中有一万匹动物奔腾而过!

对这些提到的错误一一作出相应的修复之后再打包一次。嗯,你可能还会是Cook Failure,Exit with errorcode = 25。但是, Error 的数量会减少。你修改了几个,就减少了几个。因为UE4 log只是提供了前一百个Error/Warning,只提供了部分Error。因此,需要不断地打包,查log,然后修复错误,再打包,再查log,再修复错误。直到最终它能完成Cook这个过程。

成功打包

MainFrameActions: Packaging (Windows (64-bit)): UE4Editor-Cmd: [2017.04.13-09.33.42:951][ 0]LogInit:Display: LogUObjectGlobals:Warning: Failed to load ‘E:/ACEProject/ACE_Noprint/Content/UI/HUD/MIAOZ.uasset’: Can’t find file for asset ‘/Game/HUD/Textures/MZZX’ while loading E:/ACEProject/ACE_Noprint/Content/UI/HUD/MIAOZ.uasset.
MainFrameActions: Packaging (Windows (64-bit)): UE4Editor-Cmd: [2017.04.13-09.33.42:951][ 0]LogInit:Display: LogLinker:Warning: Can’t find file for asset ‘/Game/HUD/Textures/FXLJ’ while loading NULL.
MainFrameActions: Packaging (Windows (64-bit)): UE4Editor-Cmd: [2017.04.13-09.33.42:951][ 0]LogInit:Display: LogUObjectGlobals:Warning: Failed to load ‘/Game/HUD/Textures/FXLJ’: Can’t find file for asset ‘/Game/HUD/Textures/FXLJ’ while loading NULL.
MainFrameActions: Packaging (Windows (64-bit)): UE4Editor-Cmd: [2017.04.13-09.33.42:965][ 0]LogInit:Display: LogLinker:Warning: Can’t find file for asset ‘/Game/HUD/Textures/MZZX’ while loading NULL.
MainFrameActions: Packaging (Windows (64-bit)): UE4Editor-Cmd: [2017.04.13-09.33.42:965][ 0]LogInit:Display: LogUObjectGlobals:Warning: Failed to load ‘/Game/HUD/Textures/MZZX’: Can’t find file for asset ‘/Game/HUD/Textures/MZZX’ while loading NULL.
MainFrameActions: Packaging (Windows (64-bit)): UE4Editor-Cmd: [2017.04.13-09.33.42:965][ 0]LogInit:Display: LogLinker:Warning: Can’t find file ‘/Game/HUD/W_LeftScreenTexture2’
MainFrameActions: Packaging (Windows (64-bit)): UE4Editor-Cmd: [2017.04.13-09.33.42:966][ 0]LogInit:Display: LogUObjectGlobals:Warning: Failed to load ‘/Game/HUD/W_LeftScreenTexture2’: Can’t find file ‘/Game/HUD/W_LeftScreenTexture2’
MainFrameActions: Packaging (Windows (64-bit)): UE4Editor-Cmd: [2017.04.13-09.33.42:967][ 0]LogInit:Display: LogLinker:Warning: Can’t find file for asset ‘/Game/HUD/W_LeftScreenTexture2’ while loading E:/ACEProject/ACE_Noprint/Content/UI/HUD/HUD_Texture2.uasset.
MainFrameActions: Packaging (Windows (64-bit)): UE4Editor-Cmd: [2017.04.13-09.33.42:968][ 0]LogInit:Display: NOTE: Only first 50 warnings displayed.
MainFrameActions: Packaging (Windows (64-bit)): UE4Editor-Cmd: [2017.04.13-09.33.42:968][ 0]LogInit:Display:
MainFrameActions: Packaging (Windows (64-bit)): UE4Editor-Cmd: [2017.04.13-09.33.42:968][ 0]LogInit:Display: Success - 0 error(s), 264 warning(s)
MainFrameActions: Packaging (Windows (64-bit)): UE4Editor-Cmd: [2017.04.13-09.33.42:969][ 0]LogInit:Display:
MainFrameActions: Packaging (Windows (64-bit)): UE4Editor-Cmd:
PackagingResults:Warning: Warning Warning Unable to find package for cooking /Game/main
MainFrameActions: Packaging (Windows (64-bit)): UE4Editor-Cmd: Execution of commandlet took: 918.43 seconds
MainFrameActions: Packaging (Windows (64-bit)): CommandUtils.Run: Run: Took 1001.375s to run UE4Editor-Cmd.exe, ExitCode=0
MainFrameActions: Packaging (Windows (64-bit)): Project.Cook: ** COOK COMMAND COMPLETED **
MainFrameActions: Packaging (Windows (64-bit)): Project.CopyBuildToStagingDirectory: ** STAGE COMMAND STARTED **
MainFrameActions: Packaging (Windows (64-bit)): Project.CreateStagingManifest: Creating Staging Manifest…
MainFrameActions: Packaging (Windows (64-bit)): Project.CleanStagingDirectory: Cleaning Stage Directory: E:\ACEProject\ACE_Noprint\Saved\StagedBuilds\WindowsNoEditor
MainFrameActions: Packaging (Windows (64-bit)): Project.CopyManifestFilesToStageDir: Copying NonUFSFiles to staging directory: E:\ACEProject\ACE_Noprint\Saved\StagedBuilds\WindowsNoEditor
MainFrameActions: Packaging (Windows (64-bit)): Project.CopyManifestFilesToStageDir: Copying UFSFiles to staging directory: E:\ACEProject\ACE_Noprint\Saved\StagedBuilds\WindowsNoEditor
MainFrameActions: Packaging (Windows (64-bit)): Project.CopyBuildToStagingDirectory: ** STAGE COMMAND COMPLETED **
MainFrameActions: Packaging (Windows (64-bit)): Project.Package: ** PACKAGE COMMAND STARTED **
MainFrameActions: Packaging (Windows (64-bit)): Project.Package: ** PACKAGE COMMAND COMPLETED **
MainFrameActions: Packaging (Windows (64-bit)): Project.Archive: ** ARCHIVE COMMAND STARTED **
MainFrameActions: Packaging (Windows (64-bit)): Project.Archive: ** ARCHIVE COMMAND COMPLETED **
MainFrameActions: Packaging (Windows (64-bit)): Automation.Execute: BUILD SUCCESSFUL
MainFrameActions: Packaging (Windows (64-bit)): Program.Main: AutomationTool exiting with ExitCode=0 (Success)
MainFrameActions: Packaging (Windows (64-bit)): Domain_ProcessExit

基本上过了 COOK 过程,后面的 STAGE, PACKAGE, ARCHIVE 都是比较好过,不容易再有错误的。

打包总结

为了避免打包时出现各种莫名其妙的错误。一定要在工程制作的过程中处处小心,不要给后面的打包过程挖坑!!!

  • 程序类之间的调用关系、接口一定要定好,被调用类程序的创作者应该有一定的职业修养!
  • 蓝图中,不使用的代码部分一定要做好处理,保证里面没有致命错误。最好能够删除不必要的代码。否则很容易出现程序可以在UE4中运行无误,但是没法打包的情况。最好还是用C++编程。
  • 不使用的 asset 一定要删除干净!尤其是一些可能存在错误的材质、贴图!天知道TMD在这张图之前我修改过多少 Material 和 Texture 的错误。
  • Substance 制作的贴图或材质在UE4 12版本中可以用的,当使用UE4直接提升为14版本后,不能使用,出现一大堆错误!!
  • 建议在工程制作过程中,分阶段地定期尝试一下打包,不要把打包放在最后。。等这个工程在开发过程中已经积累满了各种各样的臭虫之后再弄,太恶心了!!和很多开发原则一样,甚至和很多疫情处理原则一样,早检查,早发现,早处理,早隔离,早治疗!!不要拖。

欢迎关注我的微信公众号:VR_Tech。

公众号刚刚起步,还十分不完善。更多内容,敬请期待。

这里写图片描述

这里写图片描述

0 0