Blueprint 类实现
UBlueprintCore >
作为蓝图的基类,继承自UObject, 所有的Blueprint都将包含 SkeletonGeneratedClass 和 GeneratedClass 两个属性
主要成员变量
- TSubclassOf
SkeletonGeneratedClass: 指向skeleton class的指针,每当向蓝图中添加一个变量或者函数时,都会重新生成skeleton class - TSubclassOf
GeneratedClass: 指向全编译class的指针,通常使用的都是这个class,其内部的属性都被填充,可以完整的描述一个蓝图。由于蓝图类class是就地编译的,因此不管编译几次,这个指针都不需要改变。 - bLegacyNeedToPurgeSkelRefs: 向后兼容:是否需要将此蓝图中的引用清除为加载时编译生成的框架
- GenerateNewGuid(): 创建 Blueprint 时,创建Guid
- FGuid GetBlueprintGuid(): 获取Guid
UBlueprint >
负责实现蓝图的主要功能,包括蓝图属性、蓝图函数、节点连接关系等所有蓝图信息
主要成员变量:
TSubclassOf
ParentClass: 指向蓝图类父类的UClass。会注册到AssetRegistryTags中,以支持蓝图预览。 - Blueprint 和 父类之间并不是继承关系,其实是组合关系,ParentClass 指向 Blueprint 的 父类
- ParentClass 返回的也是Blueprint 父类的包装类, 真正的父类实例使用 ClassDefaultObject 获取
const auto MyActor = Cast<Actor>(Blueprint->ParentClass->ClassDefaultObject); const auto MyAnimInstance = Cast<AnimInstance>(AnimBlueprint->ParentClass->ClassDefaultObject);
TArray<UEdGraph*> UbergraphPages: 所有ubergraphpages,一个ubergraph就是编辑器左侧显示的一个eventgraph,里面会包含所有event的实现,在蓝图编译时,它们会被复制到一个大的ubergraph中
TArray<UEdGraph*> FunctionGraphs: 所有函数graph(ConstructionScript, UAnimationGraph)
TArray<UEdGraph*> DelegateSignatureGraphs: 所有事件代理Graph
TArray<UEdGraph*> MacroGraphs: 所有这个蓝图实现的宏
TArray<UEdGraph*> EventGraphs: 所有的Event声明
TArray<class UTimelineTemplate*> Timelines: 蓝图中的Timeline,timeline需要被特别处理
TArray
NewVariables:这个蓝图自己创建的变量,不包含从父类继承的,在编译时会添加到BlueprintGeneratedClass中 TArray<class UBreakpoint*> Breakpoints: 断点集合,用于调试
** 蓝图编译过程就是把UBlueprint描述的信息转换为BlueprintGeneratedClass的过程 **
UAnimBlueprint >
Anim Blueprint本质上是一种专用的Blueprint,其图形控制着Skeletal Mesh的动画。 它可以执行动画混合,直接控制骨骼的骨骼,并在每帧中输出“骨架网格物体”的最终姿势。
主要成员变量:
- USkeleton* TargetSkeleton : 此蓝图动画所用的的骨骼资源,动画蓝图编辑器中也会根据此骨骼列出所有此骨骼的动画
UEdGraph >
节点数据的容器
- TSubclassOf<class UEdGraphSchema*> Schema: 这个图要遵循的schema
- TArray<class UEdGraphNode*> Nodes: 图中的所有节点
- TArray<class UEdGraph*> SubGraphs: 这个图包含的子图,一个例子就是动画蓝图的状态机,状态机就作为子图存在
UEdGraphSchema >
Schema 是与 Graph对应的,约定了当前Graph能创建什么样的节点、两个引脚能否产生连接等等。类的继承关系如下
相当于 Graph 工具类
- GetGraphContextActions(): 在当前蓝图的空白处单击右键出现的节点菜单栏,列出了当前Graph能添加的所有节点
- GetContextMenuActions(): 在节点或引脚上右键出现的操作菜单栏,比如deletelink、break等
- CanCreateConnection(): 传入两个引脚,判断两个引脚间能否建立连线。返回的并不是一个boo值,而是枚举ECanCreateConnectionResponse,包含了更多信息
UEdGraphNode >
一个图由许多节点组成,比如上面的Graph例子图片,每个节点都有自己的功能,就像一个个砖块,节点的基类为UEdGraphNode。上面提到了多种图,因此也会有和图对应的节点。而UK2Node比较特别,因为它是所有蓝图节点的基类,这里说的蓝图节点就是普通意义上的蓝图节点,例如ifelse、方法调用、for循环等。节点的继承关系如下
- TArray<UEdGraphPin*> Pins: 节点上的所有引脚
- int32 NodePosX,NodePosY,NodeWidth,NodeHeight: 节点的位置,长宽,在展开时会用到,避免节点间产生重叠
UBlueprint, UAnimBlueprint, UEdGraphSchema, UEdGraph, UEdGraphNode 关系
- UBlueprint 是包含蓝图所有的信息类
- UAnimBlueprint 一种特殊的 UBlueprint, 用于控制动画
- UEdGraph 包含 所有 蓝图节点(UEdGraphNode)的容器
- UEdGraphSchema 操作 UEdGraph 上节点(UEdGraphNode)的工具类