虚幻引擎 Set Array Elem 节点

在虚幻引擎5蓝图中,Set Array Elem 节点用于修改数组中指定索引位置的元素值。它与直接“设置数组中的项”不同,不仅能更新已有元素,还可以通过“Size to Fit”选项,在索引超出当前数组大小时自动扩展数组,用默认值填充中间位置。

下面以一个完整的实操案例来说明,你可以在自己的项目中跟着做。


案例目标

创建一个整数数组 MyArray,初始值为 [10, 20, 30]。游戏开始时:

  • 将索引 1(第二个元素)的值改为 99

  • 再将索引 5 的值改为 50,并启用“Size to Fit”,观察数组自动扩展。

  • 最后遍历打印整个数组,验证结果。


具体操作步骤

1. 创建测试用蓝图

  • 在内容浏览器中右键,选择 蓝图类 → 选择 Actor,命名为 BP_ArrayTest

  • 双击打开蓝图编辑器。

2. 添加数组变量

  • 在左侧“我的蓝图”面板中,点击 + 号添加变量,命名为 MyArray

  • 在右侧细节面板中,将 变量类型 改为 Integer

  • 点击变量类型旁边的“彩色圆形”图标(或直接点击数组图标),将它变成 数组 形式(Integer 会显示为 Array of Integer)。

  • 编译 蓝图(点击工具栏“编译”按钮)。

  • 编译后,在细节面板中会看到 MyArray 的默认值区域。点击 + 添加三个元素,分别填入 102030
    (如果没看到默认值,确保已经编译,并且变量没有勾选“私有”和“高级”隐藏)

3. 编写蓝图逻辑

切换到事件图表(Event Graph),按以下步骤连线:

步骤一:从 BeginPlay 事件开始

  • 图表中默认有一个 Event BeginPlay 节点,如果没有,右键搜索 Event BeginPlay 添加。

步骤二:第一次使用 Set Array Elem(修改索引 1)

  • 从 Event BeginPlay 执行引脚拖出,搜索 Set Array Elem 添加节点。

  • 设置节点参数:

    • Array:从变量列表拖入 MyArray 到 Array 输入引脚(或右键输入“MyArray”获取变量)。

    • Index:填入 1

    • Item:填入 99

    • Size to Fit:保持默认 不勾选(false)。因为索引 1 在现有数组范围内(0~2),不需要扩展。

步骤三:第二次使用 Set Array Elem(索引 5 并扩展)

  • 从第一个 Set Array Elem 的执行输出引脚拖出,再次添加 Set Array Elem 节点。

  • 设置参数:

    • Array:同样引用 MyArray(需使用同一个数组变量,才能看到累积效果)。

    • Index:填入 5

    • Item:填入 50

    • Size to Fit:这次 勾选(true)。因为数组当前只有索引 0~2,索引 5 越界;勾选后,引擎会自动把数组大小扩展至索引 5+1=6,并把索引 3、4 用整数的默认值 0 填充。

步骤四:遍历打印数组(验证结果)

  • 从第二个 Set Array Elem 的执行输出再拖出,搜索 ForEachLoop 节点(注意选择数组版本的 ForEachLoop)。

  • 在 ForEachLoop 节点上:

    • 将 MyArray 变量拖到它的 Array 输入引脚。

  • 从 ForEachLoop 的 Loop Body 执行引脚拖出,搜索 Print String 节点。

  • 将 ForEachLoop 的 Array Element 和 Array Index 分别转换为文本并打印。可以这样操作:

    • 拖出 Print String 节点,在 In String 上右键选择 “拆分结构体引脚”(或者使用 Format Text 更美观)。

    • 简单方式:直接右键 Array Element 选择 “To Text (Int)” 拖入 In String,这会打印每个元素的值。

    • 更好的方式:使用 Format Text 节点,格式如 "Index {0}: {1}",然后将 Index 和 Element 连入。这里为了方便,可以直接打印 Array Element 转为 Text 的值。

4. 完整蓝图连线示例(文字描述)

text
Event BeginPlay
  → Set Array Elem (Array=MyArray, Index=1, Item=99, Size to Fit=false)
    → Set Array Elem (Array=MyArray, Index=5, Item=50, Size to Fit=true)
      → ForEachLoop (Array=MyArray)
        → Print String (In String=ToText(Array Element))
  • 每个节点的白色执行线依次串联。

  • 数组变量 MyArray 连线为深蓝色,连接到两个 Set Array Elem 的 Array 引脚,以及 ForEachLoop 的 Array 引脚。

5. 编译、保存并测试

  • 点击 编译,确保没有错误。

  • 将 BP_ArrayTest 拖入关卡视口。

  • 点击运行(Play),屏幕上会依次打印数组元素。

  • 期望输出:

    text
    10
    99
    30
    0
    0
    50

    解释:索引 0 保持 10;索引 1 被改为 99;索引 2 仍为 30;索引 3、4 因 Size to Fit 自动填充为 0;索引 5 被设为 50。


节点详解与注意事项

引脚 说明
Array 目标数组变量,必须是引用(不是值拷贝)。
Index 要设置的索引位置(从 0 开始)。
Item 要放入该索引的新值,类型必须与数组元素类型匹配。
Size to Fit 布尔值:为 true 时,若索引超出当前数组范围,自动将数组扩大到 Index+1,并用默认值填充空位;为 false 时,如果索引越界,节点不执行任何操作(数组保持不变)。

关键细节:

  • 节点是直接修改传入的数组,没有输出数组引脚,因为它修改的是变量引用的同一数组。

  • 如果索引为负数,无论 Size to Fit 如何设置,都不会生效(会报错或无效)。

  • 多次使用 Set Array Elem 时,必须保证都操作同一个数组引用,否则修改会丢失。


适用场景

  • 更新玩家背包栏特定位置:比如玩家把药水从第3格拖到第5格,你只需 Set Array Elem 修改对应索引的物品 ID。

  • 改变存档槽数据:修改某个存档索引的状态。

  • 逐帧修改数组特定元素:如音频均衡器的频率数组,只调整某几个频段。

通过这个案例,你应该能完全掌握 Set Array Elem 的用法,并理解 Size to Fit 的边界处理特性。实际项目中灵活运用即可。

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

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

昵称

取消
昵称表情代码图片

    暂无评论内容