Choose your operating system:
Windows
macOS
Linux
虚幻引擎4中的蓝图应用程序编程接口(API)有一个 Map 容器类型。和 数组(Array) 以及 集合(Sets) 类似,蓝图Map在开发游戏时有各种用途。 如你不了解"容器",可将其想象为一个储物盒。你可将项目进行标记并放置在盒中以便立即(或之后)使用。如你已使用 Array 存储并使用项目集,则意味着其实你已经开始使用 UE4 中的蓝图容器。举例而言,使用 Array 存储项目以便之后使用的时候,项目的标签便是其在 Array 中的位置。 Map 和 Array 相似,两者均使用标签说明 项目在容器中的位置,然而 Map 的标签与 Array 的标签有所不同。使用 Array 时,标签是容器中项目的顺序索引;而使用 Map 时,标签是容器中与项目相关的一个键。能够将容器中的项目与其相应的键关联起来后,开发者便能够使用关联键有效查找和检索项目,从而用创意的方式处理 Map。
通读此页后,你将了解到如何创建和编辑蓝图 Map。你还将了解到 Map 的属性,它们将助你在游戏项目中充分发挥 Map 的优势。
创建 Map
根据以下步骤即可新建蓝图 Map。
-
如无可用蓝图类,需要为项目 添加 一个新的蓝图类。
-
然后从 Pick Parent Class 菜单中选中 Actor 。
-
为 Actor 类命名后,在 Content Browser 中双击将新建的 Actor 类打开。
-
选择 Event Graph 标签,开始编辑 Actor 的蓝图脚本。
-
Actor 的 事件图表 打开后,将鼠标指针悬停在 Variables 子菜单上,显示 + Variable 按钮。
-
新建一个 字符串 变量,将其命名为
MyStringIntegerMap
。虽然变量的命名看似有些老学究,但重点是变量命名,尤其是
MyStringIntegerMap
可告知用户 Map 将拥有一个与整数类值关联的字符串类键。 -
当前
MyStringIntegerMap
是一个单一 字符串 变量。点击 Variable Type 按钮即可开始将MyStringIntegerMap
装入 Map 容器。此按钮位于 Actor 的 Details 面板中 Variable Type 标签的右侧。 -
此时将出现一个下拉菜单,显示 4 个容器选项。选择以下选项将
MyStringIntegerMap
转为蓝图 Map:
检查
MyStringIntegerMap
的
变量类型
,确认 Map 的键类型是
String
,值类型为
Integer
。
编辑 Map
编辑新建的 Map 之前,需要编译封装 Map 变量容器的蓝图。
-
点击蓝图的 Compile 按钮编辑
MyStringIntegerMap
。 -
编译蓝图后,Map 的 Default Value (位于 Details 面板中)显示
MyStringIntegerMap
为空。 -
点击 + 按钮即可将新键值对添加到
MyStringIntegerMap
,此按钮位于 Details 面板 Default Value 菜单中 0 Map elements 旁。 -
再次点击 + 按钮。
如在更新新键值对的默认键之前尝试将键添加到到蓝图 Map,虚幻编辑器将发出警告。
-
将 3 个键值对添加到
MyStringIntegerMap
,使其与下图匹配: -
现在多添加一个键值对,将键命名为
Banana
。如尝试将重复的键添加到蓝图 Map,虚幻编辑器将发出警告。虽然允许重复值,但不允许重复键。
-
了解之前提及的警告,将第四个键命名为
Date
,并将值设为 2。
干得漂亮!你便已经新建了一个蓝图 Map,添加并编辑了四个键值对。
容器属性
如果想开始了解在 UE4 中使用蓝图 Map 容器,请参考以下属性列表。
-
Map 中的键必须独一无二。
-
Map 中的所有键必须被定义(设定初值)。
-
当前蓝图 Map 中只支持单一键值对。
-
使用 Map 中相关联的键添加、移除和寻找值运算速度极快。
-
当前 Map 值为不可变,意味着它们创建后便不能进行修改。
-
虽然不同值类的键类可能不同,但一个 Map 中所有键和值均为齐次(类型相同)。换言之,如果一个特定 Map 的键被指定为字符串类,其值被指定为整数类;那么随后所有的键均为字符串,随后所有的值均为整数。
学习到如何在蓝图中创建和编辑 Map 容器后,即可查阅 蓝图 Map 节点 参考指南,了解蓝图 Map 节点接口的详细内容。