虚幻4蓝图编译剖析(三)
编译 上面基本的术语已经介绍完了,下面我们进入来进入蓝图编译过程分析。蓝图的编译过程都在FKismetCompilerContext::Compile()函数中。它根据编译的类型不同(上文编译选项中提到的只编译Skeleton、只生成字节码、只生成cpp代码等等)会走不同的分支。我们这里以完全编译来讲解。此处为大概的流程,若想看详细的流程,请参照流程图以及代码。 清除类 类是就地编译的,这意味着同一个UBlueprintGeneratedClass在每次编译的时候都会被清理,并且会重复利用,这样指向这个类的指针就不用修复了。CleanAndSanitizeClass()把属性和函数放到临时包的一个垃圾(trash)类里面,然后清除类中的所有数据。 创建类的属性 CreateClassVariablesFromBlueprint()函数遍历蓝图的NewVariables数组,也包括构造脚本、Timeline等地方来找到该类需要的所有属性,然后创建UProperties。 创建函数列表 通过处理事件图表(Event graph)、常规的函数图表、代理、以及接口中来创建函数。 处理事件图表 CreateAndProcessUberGraph()函数用来处理事件图表。它把所有的事件图表拷贝到一个大的图中,这个时候节点有机会去做展开操作(expand,如果它需要的话)