一、Make Array 节点概述
Make Array 是虚幻引擎5蓝图中用于从一系列数据项中动态创建一个新数组的节点。在实际开发中,当你需要通过蓝图逻辑构建新数组,而不是直接在编辑器里用预设值时,就需要用到这个节点。
二、Make Array 节点基本设置(图解操作步骤)
步骤1:创建一个数组变量(准备工作)
-
在蓝图编辑器中,点击”我的蓝图”(My Blueprint)面板右上角的 + 按钮,创建一个新变量。
-
给变量命名(如
weapon、TextArray、ItemList)。 -
将变量类型设置为目标类型(如字符串、整数、Actor引用等)。
-
在”细节”面板中点击变量类型右侧的箭头,将容器类型设置为数组。
-
点击”编译”按钮,使数组设置生效。
编译后,可在变量默认值中点击”添加元素”来预设数组元素。例如,为”weapon”数组添加三个字符串元素:索引0设为”手枪”,索引1设为”冲锋枪”,索引2设为”火箭炮”。
步骤2:放置 Make Array 节点
在事件图表中,执行以下任一操作生成 Make Array 节点:
-
方法一:右键单击图表空白处,搜索
Make Array。 -
方法二:从某个需要数组作为输入数据的节点引脚处拖出,在弹出的节点列表中搜索
Make Array。
步骤3:配置 Make Array 节点的输入引脚
Make Array 节点初始化时只有 [0] 一个输入引脚,但可以任意扩展:
-
点击节点下方的 “Add Pin” 按钮,即可添加更多引脚(引脚
[1]、[2]、[3]……)。 -
将需要放入数组的各项数据分别连接到对应的引脚上。
-
所有引脚的数据类型必须完全一致。
📌 常见误区提醒:Make Array 节点没有执行线输入(不是触发器式的节点),它只需要数据流入,输出就是组装好的数组。
步骤4:将生成的数组赋值给变量
Make Array 节点单独放在图表中不会产生任何效果,必须将生成的数组赋值给一个数组变量才能实际使用。
操作方法如下:
-
按住 Alt 键,将”我的蓝图”面板中的数组变量拖拽到事件图表中。
-
此时会自动生成一个”设置变量”节点。
-
将
Make Array节点的输出引脚连接到”设置变量”节点的输入引脚。 -
将执行线连接到”设置变量”节点的执行输入引脚。
-
触发该节点即可用新数组完全替换原数组的内容。
三、Make Array 节点的典型应用场景
场景一:为武器切换系统预设初始武器列表
在武器切换系统中,可以用 Make Array 动态构建武器列表数组。
在关卡蓝图中添加:打开关卡蓝图(Level Blueprint),创建一个自定义事件
InitWeaponList,用Make Array构建包含武器类引用的数组,赋值给武器管理器变量。
场景二:在射线检测中指定需要检测的对象类型
在线条追踪(Line Trace)节点中,Make Array 是非常常见的使用场景。Object Types 引脚通常要求输入一个数组,用于指定需要检测哪些对象类型,这时就需要用 Make Array 来构建这个数组。
在角色蓝图中添加:打开角色蓝图,在
Event BeginPlay或按下某个按键的事件后,拖出”Line Trace for Objects”节点,从Object Types引脚拖出添加Make Array节点,在下拉菜单中选择需要检测的对象类型(如WorldDynamic),可通过”Add Pin”增加更多类型。
场景三:构建库存系统的初始空数组(实用案例)
下面将通过一个完整的简易库存系统来展示 Make Array 在实际项目中的用法。
案例目标
创建一个简单的角色背包系统,角色靠近道具时按下 F 键拾取道具并存入背包数组。
准备步骤
第1步——创建道具结构体:
-
在内容浏览器中右键 → 蓝图 → 结构体(Structure)。
-
命名为
Struct_InventorySlot。 -
添加两个变量:
ItemID(字符串/名称类型)和Quantity(整数类型),表示物品数量和叠加数量。
第2步——创建库存数组变量:
-
打开角色蓝图或创建一个新的 Actor 组件蓝图作为背包管理器。
-
新建一个变量,命名为
InventoryItems,类型设置为Struct_InventorySlot的数组形式。
第3步——初始化背包(使用 Make Array):
-
在角色蓝图的
Event BeginPlay或背包管理器的构造脚本(Construction Script)中拖出Make Array节点。 -
添加引脚:通过”Add Pin”添加3个输入引脚(对应3个初始槽位)。
-
设置各槽位的默认值:使用
Make Struct_InventorySlot节点为每个槽位创建结构体,设置ItemID和Quantity。空槽位的ItemID可设为"Empty",Quantity设为 0。 -
将3个结构体分别连接到
Make Array节点的引脚[0]、[1]、[2]上。 -
用 Alt+拖拽方式添加”设置变量”节点,将
Make Array的输出连接到其输入引脚,执行该节点完成背包初始化。
第4步——实现拾取道具逻辑:
-
为道具 Actor 创建一个蓝图接口(Blueprint Interface),包含一个
PickupItem函数。 -
在背包管理器蓝图中创建
AddToInventory函数:接收一个道具ID参数,遍历InventoryItems数组查找空格位(ItemID=="Empty")。 -
找到空格位后,使用”设置阵列元素”节点将新结构体写入该索引位置。
-
触发事件分发器(Event Dispatcher),通知 UI 更新显示。
第5步——显示物品列表:
-
创建一个 UI 控件蓝图。
-
在控件蓝图的事件图表中,获取角色背包管理器的引用,用
Get节点获取InventoryItems数组。 -
配合 ForEach Loop 节点遍历数组中的每个物品,生成对应的 UI 列表项并显示到屏幕上。
四、数组操作常用节点速查表
在后续开发中,以下节点经常与 Make Array 搭配使用:
| 节点名称 | 功能说明 | 使用场景 |
|---|---|---|
| Add | 在数组末尾添加一个元素 | 添加新拾取物品 |
| Add Unique | 仅在元素不存在时添加 | 避免重复添加 |
| Insert | 在指定索引位置插入元素 | 在背包指定格子放入物品 |
| Remove Index | 按索引位置移除元素 | 移除特定槽位的物品 |
| Remove Item | 按内容移除元素 | 丢弃指定物品 |
| Set Array Elem | 修改指定索引位置的元素 | 更新物品数量 |
| Get (a copy) | 获取元素副本(修改不影响原数组) | 只读显示 |
| Get (a ref) | 获取元素引用(修改直接影响原数组) | 实时修改数组内容 |
| Length | 获取数组元素总数 | 判断背包容量/遍历边界 |
| Contains Item | 检查数组是否包含某元素 | 判断是否已拥有某道具 |
| ForEach Loop | 遍历数组所有元素 | 显示物品列表/批量处理 |
| Reverse forEachLoop | 从最后一个元素开始遍历 | 反向遍历场景对象 |
| Clear | 清空数组所有元素 | 重置背包 |
| Resize | 调整数组长度 | 动态改变背包容量 |
| Random Array Item | 随机获取一个数组元素 | 随机掉落奖励 |
| Append Array | 将两个数组合并 | 合并多个背包 |
| Find Item | 查找元素索引位置 | 定位特定物品 |
特别提醒:在使用 Set Array Elem 修改超出索引范围的元素时,需注意”Size to Fit”选项——勾选后会自动扩充数组以满足新索引,未勾选时会报错。
五、避坑指南与优化建议
-
数组索引从0开始:首个元素的索引为0,最后一个元素的索引为”数组长度-1″,理解这一点对避免越界错误至关重要。
-
Get (a copy) 与 Get (a ref) 选对用:只读场景用 Copy,需要修改原始数据时必须用 Ref。
-
不要频繁 Make Array:构建大数组会消耗性能,建议在初始化时构建一次并存储到变量中复用。
-
搭配 ForEachLoop 高效遍历:ForEachLoop节点专门用于遍历数组中的每个元素,建议在遍历数组时优先使用。
-
数组元素类型必须一致:数组的所有元素必须是同一数据类型,这是数组的基本特性。
-
结构体数组很实用:实际项目中的背包、任务、技能等系统,强烈推荐使用”结构体数组”,便于管理多个字段数据,结构清晰且可扩展性强。
感谢您的来访,获取更多精彩文章请收藏本站。







暂无评论内容