虚幻引擎 Make Array 节点

一、Make Array 节点概述

Make Array 是虚幻引擎5蓝图中用于从一系列数据项中动态创建一个新数组的节点。在实际开发中,当你需要通过蓝图逻辑构建新数组,而不是直接在编辑器里用预设值时,就需要用到这个节点


二、Make Array 节点基本设置(图解操作步骤)

步骤1:创建一个数组变量(准备工作)

  1. 在蓝图编辑器中,点击”我的蓝图”(My Blueprint)面板右上角的 + 按钮,创建一个新变量

  2. 给变量命名(如 weaponTextArrayItemList)。

  3. 将变量类型设置为目标类型(如字符串、整数、Actor引用等)。

  4. 在”细节”面板中点击变量类型右侧的箭头,将容器类型设置为数组

  5. 点击”编译”按钮,使数组设置生效。

编译后,可在变量默认值中点击”添加元素”来预设数组元素。例如,为”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 节点单独放在图表中不会产生任何效果,必须将生成的数组赋值给一个数组变量才能实际使用

操作方法如下:

  1. 按住 Alt 键,将”我的蓝图”面板中的数组变量拖拽到事件图表中。

  2. 此时会自动生成一个”设置变量”节点。

  3. 将 Make Array 节点的输出引脚连接到”设置变量”节点的输入引脚。

  4. 将执行线连接到”设置变量”节点的执行输入引脚。

  5. 触发该节点即可用新数组完全替换原数组的内容。


三、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”选项——勾选后会自动扩充数组以满足新索引,未勾选时会报错


五、避坑指南与优化建议

  1. 数组索引从0开始:首个元素的索引为0,最后一个元素的索引为”数组长度-1″,理解这一点对避免越界错误至关重要

  2. Get (a copy) 与 Get (a ref) 选对用:只读场景用 Copy,需要修改原始数据时必须用 Ref。

  3. 不要频繁 Make Array:构建大数组会消耗性能,建议在初始化时构建一次并存储到变量中复用。

  4. 搭配 ForEachLoop 高效遍历:ForEachLoop节点专门用于遍历数组中的每个元素,建议在遍历数组时优先使用。

  5. 数组元素类型必须一致:数组的所有元素必须是同一数据类型,这是数组的基本特性。

  6. 结构体数组很实用:实际项目中的背包、任务、技能等系统,强烈推荐使用”结构体数组”,便于管理多个字段数据,结构清晰且可扩展性强。

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

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

昵称

取消
昵称表情代码图片

    暂无评论内容