关于unreal:虚幻引擎编译系统总结
【USparkle专栏】如果你深怀绝技,爱“搞点钻研”,乐于分享也博采众长,咱们期待你的退出,让智慧的火花碰撞交错,让常识的传递生生不息! 一、前言始终以来很多人都在说,空幻引擎的学习难度要比Unity大很多,其中一个起因是C++自身很难,另外一点就是因为空幻写了本人的编译系统,并且为了实现反射对C++代码进行封装,因而就算对C++根底把握的不错,也一样很难了解其中代码的意思。本文将介绍空幻引擎对编译和反射做了哪些工作,帮忙刚接触空幻引擎的开发者了解并疾速上手开发,做一篇避坑指南,本文波及到我的项目开发过程中,如何防止头文件、宏等奇怪的报错,解决常见编译问题,了解空幻引擎模块化治理代码形式,了解引擎编译和启动过程,创立插件,援用第三方库,并参考引擎代码设计,获取疾速开发技巧等等。全文大略2万字,心愿能急躁看完。 二、介绍当咱们创立一个一般的C++空我的项目时,个别的步骤是配置平台、版本后,增加代码,创立main函数入口,右键我的项目点击Build(生成)或者从新生成,或者间接点击运行,而后就能够测试本人的代码和性能了。 个别状况下,是不须要点从新生成(Rebuild)的,尤其是在应用UE4时,这项肯定要慎用,因为要等很久很久能力编译完。但除非你遇到了奇怪的编译谬误,曾经确保我之后说的那些配置正确之后还有问题,再点从新生成试一下是否胜利,这里附一张图阐明: UE4运行我的项目也是如此,但不同之处在于点击“Build”的过程。首先先剖析下UE4我的项目文件构造,不然很难了解。 上面展现的是UE4我的项目带C++的样子(不带C++的我的项目这里不再赘述):文件夹数量可能有多有少,和编译指标、插件无关,都无关紧要。 当右键我的项目点击Generate Visual Studio Project选项时(如果没有该选项,查看下Epic Games Launcher是不是须要更新),就会生成Visual Studio我的项目。Visual Studio我的项目生成之后会呈现.vs、Binaries文件夹,下面说对于Rebuild慎用,这里说一个的替换形式:删除Binaries、Intermediate和.vs文件夹,并从新点Generate Visual Studio Project,关上VS生成我的项目。这样就防止Rebuild可能造成从新编译引擎的问题了。 另外,Config文件夹下是引擎和我的项目的配置文件,肯定要小心,不要删除。Content文件夹是游戏内容资源的目录;Plugins是我的项目依赖插件目录;Saved保留我的项目的一些缓存数据,包含性能调试、命令行生成的文件、保留的游戏数据和打包Cook数据等,能够删除;Source是我的项目C++代码目录。 关上VS查看我的项目构造,别离是: Engine文件夹下蕴含引擎源码;Game下蕴含我的项目代码,包含插件;Programs文件夹下有两个重要的我的项目:UnrealBuildTool(编译工具)和UnrealHeaderTool(头文件解析工具)即UBT和UHT。 空幻引擎的代码量十分恐怖,因而须要更业余的形式治理,空幻引擎采纳模块化的形式治理代码,每个模块之前互相援用依赖,通过援用的形式递归加载对应的模块,而治理这些模块的工具就是UBT,UHT用于头文件生成解析。 应用UBT治理模块的另一个起因是为了不便跨平台,这样咱们不须要为每个平台都做对应的配置,不不便且容易出问题,对开发者不敌对。有了UBT,只须要在对应的CS文件里配置一次后就能够利用到多个平台了。跨平台的工作由UBT来替你实现。 接下来具体介绍。 应用工具以下对于代码的剖析等应用的工具环境是: Windows10UE 4.26Visual Studio 2019三、UBT(UnrealBuildTool)到目前为止大略理解了UBT是空幻引擎治理各个模块的工具,但它不会编译代码,只是负责收集模块之间的信息而后依据平台和编译指标并通知编译器进行编译。UBT源码能够在解决方案的Programs\UnrealBuildTool\下找到。 UBT采样NMake Build System,咱们能够在我的项目属性的NMake处看到相干设置,这里显示的就是当咱们右键点击Build和Rebuild,Clear事件会执行的内容,如下图: 咱们顺着它批示的门路找,而后就会找到Build.bat文件,关上后查看内容: @echo offsetlocal enabledelayedexpansionREM The %~dp0 specifier resolves to the path to the directory where this .bat is located in.REM We use this so that regardless of where the .bat file was executed from, we can change toREM directory relative to where we know the .bat is stored.pushd "%~dp0\..\..\Source"REM %1 is the game nameREM %2 is the platform nameREM %3 is the configuration nameIF EXIST ..\..\Engine\Binaries\DotNET\UnrealBuildTool.exe ( ..\..\Engine\Binaries\DotNET\UnrealBuildTool.exe %* popd REM Ignore exit codes of 2 ("ECompilationResult.UpToDate") from UBT; it's not a failure. if "!ERRORLEVEL!"=="2" ( EXIT /B 0 ) EXIT /B !ERRORLEVEL!) ELSE ( ECHO UnrealBuildTool.exe not found in ..\..\Engine\Binaries\DotNET\UnrealBuildTool.exe popd EXIT /B 999)发现实质就是运行UnrealBuildTool.exe,换句话说就是给UnrealBuildTool传递配置参数并运行UnrealBuildTool.exe。 ...