ForEachLoop 是虚幻引擎5蓝图中最常用的流程控制节点之一,它的核心功能就是帮你高效地遍历数组里的每一个元素。
📋 认识三种遍历循环
| 节点名称 | 执行逻辑 | 分支控制 |
|---|---|---|
| For Each Loop | 遍历全部:从头到尾依次访问数组中的每一个元素,执行循环体内的逻辑。 | 循环体 (Loop Body):针对每一个数组元素。 完成 (Completed):所有元素遍历完后执行。 |
| For Each Loop With Break | 条件跳出:用法与普通For Each Loop基本相同,但在循环体内多了一个可控的Break执行引脚。连接条件判断后,可以提前跳出循环。 |
Break (中断):是一个输入引脚,一旦执行,无论数组是否遍历完,都会立刻跳出循环,并转而执行Completed之后的逻辑。 |
| Reverse For Each Loop | 反向遍历:从数组的最后一个元素开始,向前依次访问。在遍历的同时安全地从数组中移除元素时,这种方式非常有用。 | 循环体 (Loop Body) 和 完成 (Completed)。 |
🧩 核心概念与引脚
For Each Loop节点的核心引脚与用法如下:
-
Array (数组输入):节点最重要的输入引脚,是一个“通配符”,可以连接任何类型的数组(如整数、Actor、结构体等)。连接后,节点的类型会自动匹配。
-
Loop Body (循环体):每次迭代都会触发的执行输出。
-
Array Element (数组元素):循环体中最重要的数据输出引脚,会依次输出数组中的每一个元素。
-
Array Index (数组索引):一个整数输出,表示当前元素在数组中的位置(从0开始计数)。
-
Completed (完成):仅当整个数组的所有元素都遍历完成后,才会触发这个执行输出。
-
Break (中断):仅
For Each Loop With Break节点拥有,是一个输入引脚。
💡 两个完整使用案例
案例一:打印数组元素 (完整遍历)
这个案例演示 For Each Loop 的基本用法:创建一个整数数组,并用循环将每个元素打印到屏幕上。
-
准备数组:在事件图表中,右键创建一个
Make Array节点,添加几个整数(如 1, 3, 5, 7),并将输出提升为变量。 -
放置并连接节点:在蓝图空白处右键搜索并添加一个
For Each Loop节点。连接Event BeginPlay的执行线到For Each Loop的执行输入引脚。 -
连接数组:将
Make Array节点的输出(或你的数组变量)连接到For Each Loop的Array输入引脚。 -
添加循环体:从
For Each Loop的Loop Body引脚拉出执行线,连接到一个Print String节点。将For Each Loop的Array Element输出引脚直接连接到Print String的In String引脚上。 -
连接完成引脚:从
For Each Loop的Completed引脚拉出执行线,可以连接到另一个Print String节点,打印“完成遍历”作为提示。 -
编译并运行:编译蓝图后运行游戏,屏幕上将依次显示数组中的元素。
案例二:条件查找并中断 (Break)
这个案例演示 For Each Loop With Break 的用法:在一个字符串数组中查找特定的目标,找到后立刻停止。
-
准备数组:同样创建
Make Array,输入一系列字符串(如Apple,Banana,Orange)。 -
放置并连接节点:在蓝图空白处搜索并添加
For Each Loop With Break节点。 -
连接数组:将字符串数组连接到该节点的
Array输入引脚。 -
添加查找逻辑 (循环体):
-
从
Loop Body引脚拉出线,添加一个Branch节点。 -
在
Branch的条件输入处,添加一个==(等于)节点。 -
将
For Each Loop With Break的Array Element引脚连接到==节点的左侧。 -
在
==节点的右侧,输入你想查找的目标字符串(例如Banana)。
-
-
实现中断:
-
如果
==比较结果为True(找到了目标),将Branch的True执行引脚连接到For Each Loop With Break节点的Break输入引脚上,以提前中断循环。 -
结果如果为
False,可以不连接任何操作。
-
-
运行测试:编译运行后,循环将只找到第一个匹配项后便结束,不会继续查找数组中剩余的
Orange。
将For Each Loop With Break的逻辑包在 Blueprint Function Library 中,可以让你的代码更整洁、更安全。
💎 总结
使用 For Each Loop 可以大大简化处理数组集合的工作。当需要处理海量数据(如上万个敌人或粒子)时,请留意性能问题。对于此类“重型循环”,建议考虑在Event Tick里用索引分帧处理,或直接改用C++实现。
感谢您的来访,获取更多精彩文章请收藏本站。







暂无评论内容