混合蓝图

1. 基本概述

混合蓝图能够通过编辑可视化脚本,驱动场景中的诸多元素。

2. 基础节点

基础节点类型可按如下划分:

  • 包含4种基础数据类型。数据节点以XEPVariableNode为基类。包含一个XEVariant变量。节点可声明为常量,也可声明为变量。有具体意义的常量定义,会持续在节点库中进行补充。
    • 布尔型(xbool)
    • 浮点型(xfloat32, XVECTOR2, XVECTOR3, XVECTOR4, XETransform, XCOLORBASE)
    • 字符串(XString)
    • 整型(xin32)
  • 变量节点
    • 脚本逻辑输入节点,XEPVariableScriptNode。可以挂载一个Lua脚本,并影响连接的节点。
    • 数组变量节点。数组变量节点可以储存并检索数组内的变量,变量类型需要相同。
    • 元组变量节点。可以储存多个变量,类型可以不同。
    • 时间结构体
  • 函数节点。函数节点以XEPCallFunctionNode为基类。后续可以考虑对函数使用属性反射来生成节点,目前主要手动实现具体的函数节点。
    • 加载纹理(IXTexture+XString)
    • 脉冲产生器
    • 随机数产生器
    • 数学函数(三角函数、初等代数运算、插值、最大最小、范围限制clamp、上下限、求余mod等)
    • 日期处理函数(当前时间、求日期的年、月、日数值、日期转换等)
    • 日志打印函数
    • 文件内容读取(文本内容)
    • World/Level/Actor/Component/UserNode引擎高阶对象体系中的相关方法函数(如查找、创建、删除、加载模型、加载动画、动画控制等)
    • 蓝图加载/卸载器
  • 节点触发委托器Delegator, 支持执行一个节点时,触发该Delegator流程,Delegator为一个自动事件节点。
  • 逻辑运算节点, And, Or, Xor, Not, >, <, ==, >=, <=, !=等。
  • 移位操作和运算节点, >>, <<,|, &, ^ 生成并输出一个xuint32。
  • 集散节点,XEKnotNode。具有引脚路由分发的功能。
  • 流程控制节点
    • if ... else
    • switch ... case
    • while ... break
    • sequence(顺序执行block0, block1, block2, block3, ...)
  • 事件触发节点,基类为XEPEventNode,当触发一个事件时,如果命中蓝图中对应的事件节点,则执行。
    • Actor相关事件(碰撞事件:进入、重叠、离开;空间变换事件等)
    • 设备输入事件(屏幕点击、拖拽;按键按下、抬起等)
    • 人脸识别算法事件(表情、手势、关键点变化等)
    • 待补充

3. 节点引脚

节点两侧都有引脚。左侧的引脚是输入引脚,右侧的引脚是输出引脚。引脚分为数据引脚与执行引脚。

执行引脚 用于将节点连接在一起以创建执行流程。当输入执行引脚被激活后,节点将被执行。一旦节点的执行完成,它将激活一个输出执行引脚来继续执行流程。执行引脚在未连接时显示为空心状态,连接到另一个执行引脚后则显示为实心。函数调用节点始终只有一个输入执行引脚和一个输出执行引脚,因为函数只有一个进入点和一个退出点。其他类型的节点可以有多个输入执行引脚和输出执行引脚,从而允许不同的行为,具体情况取决于哪一个引脚被激活。

数据引脚用于将数据导入节点或者从节点输出数据。数据引脚在界面上显示为圆形,引脚旁边标注的为对应引脚名称。引脚在未连接到任何对象时,引脚名称会显示为暗灰色,连接到对象后则显示为白色。鼠标浮动到引脚上时,会有该引脚的Tooltip提示信息。

基础类型转换,数据引脚一般只能与同类型的相连接,但也支持一些可自动转换的不同的基础类型相连接,比如Int与Float、Bool与Int等也可以连接。如果不存在转换,则连接线为单一色,而存在自动转换时,连接线会出现渐变色。

4. 节点连接

节点之间通过引脚之间的连线从而连接起来。在蓝图中,引脚之间的连线一方面表示了数据流向,另一方面表示了节点之间的依赖关系

连接:在蓝图编辑器中,使用鼠标从一个(输入/输出)引脚拖动到另一个(输出/输入)引脚,如果两个引脚数据类型一致,即可连接成功。拖动过程中,连接线为虚线,连接成功后变为彩色实线。

断开:在蓝图编辑器中,断开连接有两种方法。可以从输入引脚直接拖动连接线到空白处,松开鼠标即可断开连接;还可以点击连接线,选中后,按住Delete键(Windows端)或者Commond+Delete键(Mac端)删除。

5. 蓝图编辑器使用

我们对蓝图各项编辑工作可使用蓝图编辑器来完成。

蓝图编辑器界面总共分为五个部分:蓝图面板tab、加载的蓝图子页签、工具栏、节点大纲面板、节点属性面板和蓝图节点编辑面板。

5.0.1. 蓝图面板tab

拖动“蓝图”tab(可拖动区域仅限于文字部分),可随意移动蓝图面板在整个编辑器中的位置,移动到其他面板上时,会出现如下位置标识,松开鼠标即可把蓝图面板嵌入到对应区域。

5.0.2. 蓝图子页签

蓝图编辑器可打开多个蓝图文件,文件名以蓝图子页签的形式展示(文件名不带后缀)。

5.0.3. 工具栏

  • 文件:文件菜单中有一系列蓝图文件相关的操作。
    • 保存:保存当前蓝图到文件中,默认保存到"Asset\blueprint\"文件夹中,Resources与工程路径同级;蓝图编辑器保存会生成两个文件,xx.edg(界面文件)和xx.rtg(引擎资产).
    • 清空:当只存在一个蓝图子页签时,可清空当前蓝图。

  • 编辑:编辑菜单中汇集了一系列蓝图编辑的操作。

    • 撤销/重做:针对蓝图编辑器每一步编辑操作的撤销/重做。备注:因为与主编辑器快捷键冲突,蓝图编辑器中不支持Ctrl+Z/Y快捷键。
    • 运行蓝图:编译并运行当前蓝图,该操作与停止蓝图操作互斥。
    • 停止蓝图:停止运行当前蓝图,该操作与运行蓝图操作互斥。
    • 截图:把当前蓝图内所有节点渲染到一张png图片上,并保存到Resources\blueprint文件夹下。
    • 属性面板:显示/隐藏属性面板。

  • 基础按钮:以下基础按钮同文件或编辑菜单中对应项。

  • 其他:

5.0.4. 节点属性面板

节点属性面板,用于展示和编辑当前选中的节点/引脚/图的基本属性。

5.0.5. 蓝图节点编辑面板

  • 缩放系数:它仅显示当前蓝图编辑器中的缩放比例。

  • 蓝图类型标签:它显示您正在编辑的蓝图的类型。当您编辑滤镜蓝图(FILTER BLUEPRINT)、混合蓝图(MIX BLUEPRINT),它会发生变化。

  • 编辑控制操作

    • 平移蓝图:左键单击+拖动
    • 缩放蓝图:鼠标滚轮
    • 弹出上下文菜单:右键单击
    • 选择节点/连接线:左键单击
    • 删除节点/连接线:选中后,Delete(Mac: Commond+Delete)
    • 多选:Ctrl+左键单击
    • 框选:Shift+左键单击+拖动
    • 拖动节点:左键单击+拖动
    • 引脚连接:单击+拖动
  • 添加节点:添加节点的方式分为两种,下面分别介绍。

    右键菜单添加:蓝图编辑区,右键单击空白处,弹出添加节点菜单,列出了多种类型节点。

    情境关联添加:选中要连接的引脚,鼠标左键按下拖拽到空白处抬起,会自动弹出菜单,供创建使用。

    • BaseData:基础数据输出节点,包括Int/Bool/Float/Float2/Float3/String/Image等类型节点。
    • BitwiseOperation:移位运算节点(>>, <<,|, &, ^),生成并输出一个xuint32。
    • BranchSelector:分支选择节点,包括常用的if-else与switch。
    • Compare:逻辑比较运算节点( >, <, ==, >=, <=, !=)。
    • Event:事件节点,它们使蓝图执行一系列操作,对场景中发生的特定事件(如点击按下、点击抬起、单指滑动等)进行回应。
    • Function:函数节点,常用函数,包括时间的获取、actor创建、level创建等。
    • LogicOperation:逻辑节点(&&、||、!)。
    • Loop: 循环节点,包括While循环节点和For循环节点。
    • Math: 基础数学节点,包括加、减、乘、除、Max、Min、取模、Leap插值、sin、cos基础三角函数等。
    • MixBasic:混合蓝图的基本节点,包括运行开始、运行结束、打印字符串等节点。
    • ModifierDataAdapter: 数据适配器节点,包括FilterParamGetter(滤镜材质参数适配器节点)、FilterFaceEntityGetter(人脸实体数据适配器节点)。
    • Modifiers: 修改器节点,包括ScriptModifier(脚本修改器节点)、FilterFaceEntityModifier(人脸实体修改器)、FilterFaceWarpModifier(人脸形变修改器)、FilterPassModifiter(Pass参数修改器节点)、FilterBeautiFxModifier(美颜修改器)、FilterMaskEntityModifier(人脸Mask纹理修改器)。
    • Reoute: 路由节点(暂不可用),用于可视化地改善图中的数据流。
    • SubGraphs: 子图节点,已存在的子图节点会在这里列出来。
    • TypeConvert: 基本类型转换节点,包括(int->bool、bool->int、int->float、float->int...)等。
    • API:混合蓝图适用的API节点,用于开发更加灵活的蓝图功能。

  • 子图:我们可以把任意数量节点,打包成一个子图节点。它主要用于组织,使事件图表中的内容整齐清楚。
    • 打包成子图方式:选中要打包的节点,右键->打包为子图,即可。
    • 子图展示:打包之后,变成一个节点,可双击进入子图显示。
    • 使用:打包后的子图文件,在节点添加菜单中的SubGraphs中列出,点击对应添加即可重复使用。

6. 混合蓝图开发最佳实践

此部分主要用于介绍如何使用混合蓝图编辑器编辑一个demo。

6.1. 基本制作流程

6.1.1. 创建蓝图文件

创建完工程后,右键单击图层根节点,打开右键菜单后,选择创建混合蓝图。

点击创建混合蓝图,弹出对话框,蓝图文件默认存放在工程路径下的Asset\blueprint文件夹下,无需修改路径,存放在该路径下即可。

创建文件后,在图层中会显示蓝图文件,双击蓝图文件,打开蓝图编辑器。

6.1.2. 创建蓝图节点

通过右键菜单,PrintString节点。

6.1.3. 修改节点属性

选中PrintString节点,在属性面板中显示该节点的属性信息,修改属性内容如下:

6.1.4. 预览蓝图效果

修改完属性后,点击执行蓝图,可以看到输入的字符打印到场景中。

6.2. 制作复杂的蓝图项目

上述部分介绍了创建一个最简单的蓝图demo,该demo在场景中打印Hello World字符。

复杂的蓝图效果可以通过不同的节点间组合不同的功能, 如下图所示的项目:

其最终的蓝图为:

@Copyright © cosmos 2019 all right reserved,powered by Gitbook修订时间: 2022-07-01 15:49:19

results matching ""

    No results matching ""