6 - 数据结构与控制流
光速过一遍蓝图编程,本文将光速过一遍蓝图中的高级数据结构和控制流,包括:
- 容器:数组,集合,映射;
- 其他数据结构:枚举,结构体,数据表格;
- 控制流节点,如
Switch
,Sequence
等;
容器
容器是一种数据结构,其实例可以存储值或实例的集合,容器中的值必须具有相同的类型。
数组
数组是一种容器类型,用于存储特定数据类型的一个或多个值。它提供对元素的索引访问。
如果要在蓝图中动态创建一个数组,需要使用Make Array
节点:
要获取/修改数组的值,需要分别使用Get (a copy)
节点与Set Array Elem
节点:
要给数组添加新元素,可以使用ADD
节点或INSERT
节点。前者直接将元素添加到数组末尾,而后者可以指定插入的位置,并移动其余的元素。
要想获取数组的长度,可以使用LENGTH
节点。要想获取数组最后一个元素的索引(即LENGTH - 1
),可以使用LAST INDEX
节点。
此外,还有获取随机元素的Random Array Item
节点,判断数组是否为空的Is Empty
节点等。
集合
集合是一个无序的唯一元素的列表,按元素值本身进行查找。
常用到的节点如下:
ADD
:向集合中添加一个元素;ADD ITEMS
:向集合中添加一个数组的元素;REMOVE
:删除集合中的一个元素,成功返回True;REMOVE ITEMS
:删除集合中由数组指定的元素;CLEAR
:删除集合中的所有元素;CONTAINS
:集合中是否包含给定元素;LENGTH
:返回集合中元素个数;TO ARRAY
:将集合元素复制到一个数组中;UNION
:集合间的并集运算;DIFFERENCE
:集合间的差集运算;INTERSECTION
:集合间的交集运算;Make Set
:用给定元素在蓝图中动态创建一个集合;
映射
映射容器使用键值对定义每个元素,不允许出现重复的键,可以出现重复的值。
常用到的节点如下:
ADD
:向映射中添加一个键值对,如果该键已存在,旧值会被覆盖;REMOVE
:向映射中移除一个键值对,成功删除返回True;CLEAR
:删除映射中的所有元素;LENGTH
:返回映射中的元素数量;CONTAINS
:该映射的键中是否包含给定元素;FIND
:返回映射中给定键对应的值;KEYS
:将映射的所有键复制到一个数组中;VALUES
:将映射的所有值赋值到一个数组中;
其他数据结构
枚举
枚举是一种数据类型,包含一组固定的命名常量。要创建一个枚举类型,需要在“内容浏览器”,“蓝图”,“枚举”中创建。
要想在蓝图中使用枚举类,需要为它创建一个变量,然后就能使用了。
结构体
结构体是一种复合数据类型,是不同类型变量的组合。要创建一个结构体类型,需要在“内容浏览器”,“蓝图”,“结构体”中创建。
常用到的节点有Make
和Break
节点,它们可以组成或分解一个结构体变量:
数据表格
数据表格(Data Table)是基于特定结构的值表,用于表示一个电子表格文档。这对于数据驱动的游戏玩法很重要。要想创建一个数据表格,可以在“内容浏览器”,“其他”,“数据表格”中创建。
表中不同列的原型是一个结构体:
此外也能用CSV文件进行导入/导出操作:
要想在蓝图中使用数据表格,首先创建一个它的变量,然后使用如下节点:
Get Data Table Row
:返回一个指定行的数据的结构体;Get Data Table Row Names
:将数据表的所有行名复制到一个数组中;Get Data Table Column as String
:将列的所有值复制到字符串数组中;
流控制节点
Switch节点
进行高级分支操作:
Flip Flop节点
先执行A,再执行B,然后循环往复。其中Is A
变量表示当前是否正在执行A。
需要注意的是,该节点如果在函数中运行,结果可能不正确。因为它依靠内部变量IsA
决定当前该执行什么,而函数结束后该变量就会被删除。
Sequence节点
按顺序执行连接到输出引脚的所有操作:
For Each Loop节点
遍历数组中的每一个元素,并作为输出供循环使用:
Do Once节点
仅执行一次输出引脚,若再次被触发,其输出引脚不会被执行。可以通过触发Reset引脚来重置该节点的状态。
Do N节点
允许执行输出引脚N次,若超过触发次数,其输出引脚不会被执行,可通过触发Reset引脚重置该节点的状态。
Gate节点
具有内部状态,如果触发时处于打开状态,则执行输出引脚,否则触发时不执行输出引脚。
它的输入引脚的含义如下:
Enter
:接收执行流的执行引脚;Open
:将Gate状态设置为打开的执行引脚;Close
:将Gate状态设置为关闭的执行引脚;Toggle
:用于反转Gate状态的执行引脚;Start Closed
:决定Gate的初始状态;
MultiGate节点
触发它时,其中一个输出引脚将会被执行。可以是按顺序的,也可以是随机的,也可以是循环的。
它的输入引脚含义如下:
Reset
:重置输出引脚的索引为Start Index
,如果它为-1,那么重置为0;Is Random
:按随机顺序输出;Loop
:True则循环重复执行输出引脚,False则在所有输出引脚均被执行一次后停止允许;
参考资料
- 中文翻译:《UE5蓝图可视化脚本游戏开发完全学习教程》
- 英文原版:《Blueprints Visual Scripting for Unreal Engine 5 Third Edition》