虚幻引擎节点 For Each Loop 介绍

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 的基本用法:创建一个整数数组,并用循环将每个元素打印到屏幕上。

  1. 准备数组:在事件图表中,右键创建一个Make Array节点,添加几个整数(如 1, 3, 5, 7),并将输出提升为变量。

  2. 放置并连接节点:在蓝图空白处右键搜索并添加一个For Each Loop节点。连接Event BeginPlay的执行线到For Each Loop的执行输入引脚。

  3. 连接数组:将Make Array节点的输出(或你的数组变量)连接到For Each LoopArray输入引脚。

  4. 添加循环体:从For Each LoopLoop Body引脚拉出执行线,连接到一个Print String节点。将For Each LoopArray Element输出引脚直接连接到Print StringIn String引脚上

  5. 连接完成引脚:从For Each LoopCompleted引脚拉出执行线,可以连接到另一个Print String节点,打印“完成遍历”作为提示。

  6. 编译并运行:编译蓝图后运行游戏,屏幕上将依次显示数组中的元素。

案例二:条件查找并中断 (Break)

这个案例演示 For Each Loop With Break 的用法:在一个字符串数组中查找特定的目标,找到后立刻停止。

  1. 准备数组:同样创建Make Array,输入一系列字符串(如 AppleBananaOrange)。

  2. 放置并连接节点:在蓝图空白处搜索并添加For Each Loop With Break节点。

  3. 连接数组:将字符串数组连接到该节点的Array输入引脚。

  4. 添加查找逻辑 (循环体)

    • Loop Body引脚拉出线,添加一个Branch节点。

    • Branch的条件输入处,添加一个==(等于)节点。

    • For Each Loop With BreakArray Element引脚连接到==节点的左侧。

    • ==节点的右侧,输入你想查找的目标字符串(例如 Banana)。

  5. 实现中断

    • 如果==比较结果为True(找到了目标),将BranchTrue执行引脚连接到For Each Loop With Break节点的Break输入引脚上,以提前中断循环

    • 结果如果为False,可以不连接任何操作。

  6. 运行测试:编译运行后,循环将只找到第一个匹配项后便结束,不会继续查找数组中剩余的 Orange

For Each Loop With Break的逻辑包在 Blueprint Function Library 中,可以让你的代码更整洁、更安全

💎 总结

使用 For Each Loop 可以大大简化处理数组集合的工作。当需要处理海量数据(如上万个敌人或粒子)时,请留意性能问题。对于此类“重型循环”,建议考虑在Event Tick里用索引分帧处理,或直接改用C++实现。

感谢您的来访,获取更多精彩文章请收藏本站。

THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容