一、案例概述
本文将通过一个完整的“玩家背包物品列表”案例,演示如何在虚幻引擎5蓝图中使用 Get Keys 和 Get Values 节点操作Map(映射/字典)容器。
案例目标:创建一个 String → Integer 类型的Map,存储物品名称与其数量,然后通过 Keys 和 Values 节点分别获取所有物品名称和对应数量,并打印输出。
二、准备工作:创建Map变量
步骤1:创建Map类型变量
-
打开任意蓝图类(如
BP_GameMode或BP_PlayerController),进入事件图表(Event Graph)。 -
在左侧 我的蓝图(My Blueprint) 面板中,点击 + 按钮新建变量。
-
将变量命名为
ItemMap。 -
在细节(Details)面板中:
-
将 变量类型(Variable Type) 设置为 Map(映射)。
-
键(Key)类型 选择 String(物品名称)。
-
值(Value)类型 选择 Integer(物品数量)。
-
-
点击编译(Compile)按钮保存。
步骤2:在Map中添加初始数据
-
编译后,在细节(Details)面板中会显示 “0 elements” 的Map编辑器。
-
点击 + 按钮添加元素,每个元素包含左侧的 Key 和右侧的 Value。
-
添加以下测试数据:
| Key(物品名称) | Value(数量) |
|---|---|
| “Sword” | 1 |
| “Potion” | 5 |
| “Gold” | 100 |
| “Shield” | 2 |
三、使用 Keys 节点——获取所有键
节点功能:Keys 节点能够获得Map中的所有Key值,并输出为一个数组。
操作步骤
-
在事件图表中,从
ItemMap变量拖出连线,松开鼠标。 -
在弹出菜单中搜索
Keys,选择 Keys 节点。 -
该节点会输出一个
Array of String(字符串数组),包含Map中所有的Key。 -
(可选)将输出的数组连接到
For Each Loop节点,遍历所有物品名称:-
从Keys节点的
Keys输出引脚拖出连线。 -
搜索并选择
For Each Loop节点。 -
在循环体内,将
Array Element连接到Print String节点,打印每个物品名称。
-
节点说明
-
输入:
Target Map—— 要提取键的Map。 -
输出:
Keys—— 包含所有键的数组。
四、使用 Values 节点——获取所有值
节点功能:Values 节点能够获得Map中的所有Value值,并输出为一个数组。
操作步骤
-
在事件图表中,从
ItemMap变量拖出连线。 -
在弹出菜单中搜索
Values,选择 Values 节点。 -
该节点会输出一个
Array of Integer(整数数组),包含Map中所有的Value。 -
(可选)将输出的数组连接到
For Each Loop节点,遍历所有数量值并打印。
五、完整案例:同时获取Keys和Values
场景需求
打印背包中所有物品及其对应数量,格式为:"物品名称: 数量"。
蓝图实现步骤
-
获取所有Keys和Values:
-
从
ItemMap拖出连线 → 选择 Keys 节点。 -
再次从
ItemMap拖出连线 → 选择 Values 节点。
-
-
遍历Keys数组:
-
从Keys节点的
Keys输出引脚拖出连线 → 选择For Each Loop节点。 -
在循环体中,使用
Find节点根据当前Key查找对应的Value:-
从
ItemMap拖出连线 → 搜索Find。 -
将
For Each Loop的Array Element(当前物品名称)连接到Find节点的Key输入引脚。 -
Find节点输出对应的
Value(物品数量)。
-
-
-
格式化并打印:
-
使用
Append或Format Text节点,将物品名称和数量拼接成字符串。 -
连接到
Print String节点打印输出。
-
提示:社区中常见做法是”先从Map中Get Keys,然后循环遍历Keys,再通过Find查找对应的Value”。
六、Map常用节点速查
| 节点 | 功能 | 说明 |
|---|---|---|
| Keys | 获取所有键 | 输出包含所有Key的数组 |
| Values | 获取所有值 | 输出包含所有Value的数组 |
| Find | 根据Key查找Value | 输入Key,输出对应的Value |
| Add | 添加/更新键值对 | 如果Key已存在则覆盖Value |
| Remove | 根据Key删除元素 | 删除指定的键值对 |
| Clear | 清空Map | 删除所有元素 |
| Length | 获取元素数量 | 返回Map中的键值对总数 |
| Contains | 检查Key是否存在 | 返回布尔值 |
| For Each (Map) | 遍历Map | 直接遍历所有键值对,效率更高 |
七、注意事项
-
顺序不固定:Map中Key/Value的存储顺序与添加顺序可能不同,遍历时不要依赖顺序。
-
Key必须唯一:Map中Key是唯一的,如果使用 Add 节点添加已存在的Key,旧值会被覆盖。
-
Keys和Values是纯函数(Pure Function) :在UE5中,
Get Keys和Get Values节点是纯函数,不会产生执行流引脚,使蓝图更简洁。 -
遍历方式选择:
-
如果只需要Key或Value其中之一,使用 Keys 或 Values + For Each Loop。
-
如果同时需要Key和Value,推荐使用 For Each (Map) 节点,更高效。
-
感谢您的来访,获取更多精彩文章请收藏本站。







暂无评论内容