虚幻4蓝图编译剖析(二)
2016-10-25 23:10 by 风恋残雪, 50 阅读, 0 评论, 收藏, 编辑虚幻4编译相关术语和类图
虚幻引擎中的蓝图编译跟常规的程序编译多少是有一些不同的地方,但是基本原理是相通的。我们以普通的类蓝图为例,一个类中包含多个图,每个图中又可以包含一些子图。一个图会包含很多的节点(UEdGraphNode),每个节点可以包含若干引脚(UEdGraphPin)用来连接两个节点。节点又分为执行节点和纯节点(Pure node,上面没有执行引脚)。还有一个模式类(UEdGraphSchema)用于验证语法是否正确等。类图如下所示:
图(UEdGraph)
虚幻4中许多其它的也是使用图来实现的,所以它也有许多的派生类,比如UAIGraph、UAnimationGraph、UAnimationStateMachineGraph、UMaterialGraph等等。类图如下所示:
节点(UEdGraphNode)
一个有向无环图是由无数节点组成的,这个节点就是UEdGraphNode,因为上面提到的图中有支持各种功能的图,所以也就有各种各样的节点,下面我们只摘取一些节点类型,由于我们重点是讲解蓝图编译,所以我们把主要精力放在UK2Node上面,这个节点是所有蓝图节点的基类。类图所示:
引脚(UEdGraphPin)
每个节点上可以有多个节点,输入、输出节点以及参数引脚等等,这些引脚用于记录跟哪些引脚相连、类型、默认值等。
模式(UEdGraphSchema)
用于语法检查(看两个引脚是否可以相连、尝试连接引脚)等功能,如上面所有因为有多种图所以就需要多种模式。蓝图使用的是UEdGraphSchema_K2,动画以及UMG会有自己的Schema。类图如下所示:
FKismetCompilerContext
真正执行编译工作的类,每编译一次就会生成一个新的实例,用来存储编译类的引用以及蓝图等。整个编译过程又分为好多步,是在Compile()函数里面做的。
FKismetFunctionContext
持有编译一个函数的所有信息,包括指向相关图(UEdGraph)的引用、属性以及生成的函数等。
FBlueprintCompiledStatement
