虚幻引擎 Get Keys / Get Values 节点

一、案例概述

本文将通过一个完整的“玩家背包物品列表”案例,演示如何在虚幻引擎5蓝图中使用 Get Keys 和 Get Values 节点操作Map(映射/字典)容器。

案例目标:创建一个 String → Integer 类型的Map,存储物品名称与其数量,然后通过 Keys 和 Values 节点分别获取所有物品名称和对应数量,并打印输出。


二、准备工作:创建Map变量

步骤1:创建Map类型变量

  1. 打开任意蓝图类(如 BP_GameMode 或 BP_PlayerController),进入事件图表(Event Graph)

  2. 在左侧 我的蓝图(My Blueprint) 面板中,点击 + 按钮新建变量。

  3. 将变量命名为 ItemMap

  4. 细节(Details)面板中:

    • 将 变量类型(Variable Type) 设置为 Map(映射)

    • 键(Key)类型 选择 String(物品名称)。

    • 值(Value)类型 选择 Integer(物品数量)。

  5. 点击编译(Compile)按钮保存。

步骤2:在Map中添加初始数据

  1. 编译后,在细节(Details)面板中会显示 “0 elements” 的Map编辑器。

  2. 点击 + 按钮添加元素,每个元素包含左侧的 Key 和右侧的 Value

  3. 添加以下测试数据:

Key(物品名称) Value(数量)
“Sword” 1
“Potion” 5
“Gold” 100
“Shield” 2

三、使用 Keys 节点——获取所有键

节点功能Keys 节点能够获得Map中的所有Key值,并输出为一个数组。

操作步骤

  1. 在事件图表中,从 ItemMap 变量拖出连线,松开鼠标。

  2. 在弹出菜单中搜索 Keys,选择 Keys 节点。

  3. 该节点会输出一个 Array of String(字符串数组),包含Map中所有的Key。

  4. (可选)将输出的数组连接到 For Each Loop 节点,遍历所有物品名称:

    • 从Keys节点的 Keys 输出引脚拖出连线。

    • 搜索并选择 For Each Loop 节点。

    • 在循环体内,将 Array Element 连接到 Print String 节点,打印每个物品名称。

节点说明

  • 输入Target Map —— 要提取键的Map。

  • 输出Keys —— 包含所有键的数组。


四、使用 Values 节点——获取所有值

节点功能Values 节点能够获得Map中的所有Value值,并输出为一个数组。

操作步骤

  1. 在事件图表中,从 ItemMap 变量拖出连线。

  2. 在弹出菜单中搜索 Values,选择 Values 节点。

  3. 该节点会输出一个 Array of Integer(整数数组),包含Map中所有的Value。

  4. (可选)将输出的数组连接到 For Each Loop 节点,遍历所有数量值并打印。


五、完整案例:同时获取Keys和Values

场景需求

打印背包中所有物品及其对应数量,格式为:"物品名称: 数量"

蓝图实现步骤

  1. 获取所有Keys和Values

    • 从 ItemMap 拖出连线 → 选择 Keys 节点。

    • 再次从 ItemMap 拖出连线 → 选择 Values 节点。

  2. 遍历Keys数组

    • 从Keys节点的 Keys 输出引脚拖出连线 → 选择 For Each Loop 节点。

    • 在循环体中,使用 Find 节点根据当前Key查找对应的Value:

      • 从 ItemMap 拖出连线 → 搜索 Find

      • 将 For Each Loop 的 Array Element(当前物品名称)连接到Find节点的 Key 输入引脚。

      • Find节点输出对应的 Value(物品数量)。

  3. 格式化并打印

    • 使用 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 直接遍历所有键值对,效率更高

七、注意事项

  1. 顺序不固定:Map中Key/Value的存储顺序与添加顺序可能不同,遍历时不要依赖顺序。

  2. Key必须唯一:Map中Key是唯一的,如果使用 Add 节点添加已存在的Key,旧值会被覆盖。

  3. Keys和Values是纯函数(Pure Function) :在UE5中,Get Keys 和 Get Values 节点是纯函数,不会产生执行流引脚,使蓝图更简洁。

  4. 遍历方式选择

    • 如果只需要Key或Value其中之一,使用 Keys 或 Values + For Each Loop

    • 如果同时需要Key和Value,推荐使用 For Each (Map) 节点,更高效。

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

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

昵称

取消
昵称表情代码图片

    暂无评论内容