由于引擎版本更替原因,4.19版本后UE4渲染管线大改,FLex在官方Git整合的最后版本为4.19.2,相对稳定,但实际上还是存在着不少问题,影响了游戏的打包。
本文旨在搬运由git上#523 issue提出打包问题的解决方案供大家参考学习。
分为版本导致的声明方式更改和Include-what-you-use(IWYU)问题
首先是版本导致的声明方式更改问题
①Use newer conventions to suppress warnings,目标文件是Engine/Plugins/GameWorks/Flex/Source/ThirdParty/FlexLibrary/FlexLibrary.Build.cs,
修改如下所示
然后是废弃函数问题
②Use new function instead of the deprecated one,目标文件是Engine/Source/Runtime/Engine/Private/Materials/MaterialExpressions.cpp,
修改如下图所示
最后是IWYU问题
③Some IWYU fixes so packaging no longer breaks,目标文件挺多
Engine/Plugins/GameWorks/Flex/Source/Flex/Classes/FlexFluidSurfaceActor.h
Engine/Plugins/GameWorks/Flex/Source/Flex/Private/FlexGPUParticleEmitterInstance.cpp
Engine/Plugins/GameWorks/Flex/Source/Flex/Private/FlexManager.cpp
Engine/Plugins/GameWorks/Flex/Source/Flex/Private/FlexParticleEmitterInstance.cpp
Engine/Plugins/GameWorks/Flex/Source/Flex/Public/FlexGPUParticleEmitterInstance.h
Engine/Plugins/GameWorks/Flex/Source/Flex/Public/FlexParticleEmitterInstance.h
Engine/Source/Runtime/Engine/Public/GameWorks/FlexPluginGPUParticles.h
修改如下图所示
其中3-1和3-7问题在我的项目实际打包过程中出现。
做一些简单的解释:
前者是IWYU问题,后者是和标准库函数发生冲突了,所以这里要用FORCEINLINE内联重载操作符,以避开和标准库之间的声明冲突。