首页 > 代码库 > 虚幻4蓝图快速入门(二)

虚幻4蓝图快速入门(二)

蓝图用户指南

由于蓝图就是个可视化的脚本系统,那么一个程序语言中的基本概念也就都存在。下面我们简单来介绍下蓝图中的一些基本概念。

变量

概述

Variables(变量) 是存放一个值或引用世界中的一个Object或Actor的属性。这些用户界面 内部访问,或者通过设置使得可以在外部进行访问, 以便应用放置在关卡中的蓝图实例的设计人员可以修改它们的 值。

 

变量显示为圆角方框,方框内包含了变量的名称:

技术分享

变量类型

您可以创建各种类型的变量,包括数据类型的变量(比如布尔型、整型及浮点型)及用于存放类似于Object、Actor及特定类的引用型变量。 您还可以创建每种变量类型的数组。每种变量类型都进行了颜色编码,以方便识别。

蓝图数组

技术分享

和变量值一样,蓝图也可以在数组中存储数据。如果您不熟悉编程术语,您可以把数组想象成为存在于一个单元中的一组变量。

 

数组仅能存放一种类型的值。比如,布尔型数组仅可以存放布尔值。

 

数组变量包含一个3x3 的带颜色网格,表明它们是数组,不是正常的变量。在没有连接的数组中,其网格的中心是黑的。一旦连接后,整个网格将会可见,如下所示。

技术分享

数组索引

同时需要注意的一点是,数组中的值的索引值是 从0开始的 ,这意味着第一个索引是 0 而不是1。

流程控制

概述

Flow Control (流程控制)使得能在蓝图中清楚地控制执行的流程。 此种控制可以多种形式进行,基于某些值为真的情况来选择图表的某个分支来执行,多次执行某个特定分支,以特定顺序执行多个分支,等等。 默认的流程控制操作包括了分支(if语句),循环(for和while语句),门,及序列。

开关节点

开关节点读取数据输入,并会基于该输入值来从匹配的(或可选的默认)执行输出中发送执行流程。 可用的开关有以下几种类型: Int (整型),String (字符串型), Name (名称型),以及 Enum (枚举型)。

 

一般而言,开关节点会根据其估算的数据类型拥有执行输入以及数据输入。 输出均为执行输出。 Enum 开关会自动从 Enum 属性中生成输出执行引脚,而 Int, String 及 Name 开关拥有可自定义的输出执行引脚。

程序中的switch关键字,但是它支持更多的类型。

标准流程控制节点

这些节点提供了一系列方法来控制执行的流程

技术分享

Branch

技术分享

在面对单个 True/False 判定的情况下,Branch(分支)节点是一种创建基于判断的流程的简单方式。 在执行后,分支节点会查找附加的布尔变量的输入值,并在合适的输出节点下方来输出执行脉冲值。其实就是if-else分支。

DoN

技术分享

DoN节点将会 N 次触发执行脉冲。 在达到限制后,它将会停止所有的输出执行,直到脉冲被传入其 Reset (重置)输入。

 

例如,您可以启动车辆20次,然后在绑定到 Reset (重置)输入的加油事件被激活前,无法再次启动车辆。

DoOnce

技术分享

DoOnce节点-正如名称所显示的-将会仅仅触发执行脉冲一次。 在之后,它将会停止所有的输出执行,直到脉冲被传入其 Reset (重置)输入。 该节点等同于DoN节点中 N = 1 的情况。

 

我们举例来说,您可以对一扇开启的门的节点网络设置DoOnce,这样这扇门将仅仅开启一次。 不过您可以绑定一个触发事件到Reset(重置)输入,这样会导致在触发器被激活时,门会再次打开。

FlipFlop

技术分享

FlipFlop节点取入执行输出并在两个执行输出间切换。 其第一次被调用时,将会输出A。 第二次被调用时,将会输出B,然后再是A,然后又是B,循环往复。 该节点同时有布尔变量输出,使您可以追溯输出A何时被调用。

ForLoop

技术分享

ForLoop节点的工作原理等同于标准的代码循环,将会在开始和结束之间的每个索引触发执行脉冲。就是C++中的for循环可视化版本。

ForLoopWithBreak

技术分享

ForLoopWithBreak节点包含了能中断循环的输入引脚,除此之外,它运行的方式与ForLoop节点非常相似。

Gate

技术分享

Gate(门)节点用来开启和关闭执行流。 简单来说,Enter输入取入执行脉冲,同时门的当前状态(开启或关闭)将会决定这些脉冲是否从Exit输出中传出。

MultiGate

技术分享

MultiGate取入单个数据脉冲并将其传送到任意数量的潜在输出。 这个过程随机按顺序发生,可能会循环

Sequence

技术分享

Sequence (序列)节点使得单个执行脉冲能按顺序触发一系列事件。 节点可能有任意数量的输出,所有的输出引脚都会在序列节点一获得输入时就被调用。 它们将总是按顺序被调用,但不会有任何延迟。 对一般用户来说,输出引脚看起来好像被同时触发了一样。

WhileLoop

技术分享

只要特定值为 true ,则WhileLoop节点将会输出一个结果。 在循环的每个迭代中,它会查看其输入布尔值的当前状态。 一旦它读取到 false ,该循环中断。

函数

Functions(函数) 是属于特定 蓝图 的节点图表,该节点图表可以执行或者从 蓝图 中的另一个 图表中进行调用。函数具有一个单一的入口点,由和该函数具有相同名称的一个节点指定, 该节点包含了一个单一的执行输出引脚。当从另一个图表调用函数时,会激活该输出执行引脚, 促使执行连接网络。

访问修饰符

当创建函数时,您可以指定可以访问及不能访问这些函数的其他对象。这可以通过设置 Access Specifier(访问修饰符) 属性来完成,该属性可以在选中函数的 详细信息 面板中找到。跟C++中一样,有Public Protected Private三种类型。

纯函数和非纯函数

函数可以是 纯函数 也可以是 非纯函数 。主要的区别是纯函数不会以任何方式修改状态或者类的成员, 而非纯函数可以自由地修改状态。纯函数一般用于 getter 函数 或者仅输出一个数据值的操作符。

非纯函数必须通过在事件图表中将执行线连接到函数调用节点来显式地执行。 非纯函数通过使用以下这些方式之一进行指定:

  • 在代码中定义的函数的函数声明中指定 BlueprintCallable 关键字。
  • 将通过 蓝图编辑器 添加的函数的 Pure(纯函数) 复选框保留为未选中状态。

纯函数连接到数据引脚上,当需要依赖于纯函数的数据时,编译器会自动地执行这些函数。这意味着 对于每个连接到纯函数上的节点,都会调用一次纯函数 。纯函数通过使用以下这些方式之一进行指定:

  • 在代码中定义的函数的函数声明中指定 BlueprintPure 关键字。
  • 选中通过 蓝图编辑器 添加的函数的 Pure(纯函数) 复选框。

创建函数

在蓝图中创建函数

在 Graph(图表) 模式,从 My Blueprint(我的蓝图) 选卡下,点击New Function (新建函数)按钮。

技术分享

在蓝图接口中创建函数

在 Blueprint Interface(蓝图接口) 中创建函数同在 Class Blueprint(类蓝图) 或 Level Blueprint(关卡蓝图) 中创建函数一样,但是实现是有很大差别的。

在 Graph(图表) 模式,从 My Blueprint(我的蓝图) 选卡下,点击New Function (新建函数)按钮。

技术分享

编辑函数

一旦创建了函数,您就需要定义其功能。这个过程需要两步:

  • 创建必要的输入和输出参数
  • 在您的输入和输出之间创建节点网络来定义函数行为。

调用函数

一旦您创建并定义了您的函数后,就可以在您的事件图表中调用它。要想创建一个调用您的函数的节点:

  • 从 我的蓝图 选卡中拖拽您的函数到事件图表内的空白处
  • 在事件图表中右击,或者从适当的执行引脚或数据引脚拖拽鼠标来打开关联菜单。在关联菜单中搜索您的函数,然后选中它来添加函数调用节点。
  1. https://docs.unrealengine.com/latest/CHN/Engine/Blueprints/UserGuide/index.html

虚幻4蓝图快速入门(二)