在虚幻引擎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的默认值区域。点击+添加三个元素,分别填入10、20、30。
(如果没看到默认值,确保已经编译,并且变量没有勾选“私有”和“高级”隐藏)
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. 完整蓝图连线示例(文字描述)
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),屏幕上会依次打印数组元素。
-
期望输出:
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 的边界处理特性。实际项目中灵活运用即可。
感谢您的来访,获取更多精彩文章请收藏本站。







暂无评论内容