虚幻引擎 Make Set / Add to Set / Contains in Set 节点

在虚幻引擎5(UE5)的蓝图中,集合(Set) 是一种容器,用于存储唯一且无序的同类型元素。你可以把它想象成一个“不允许有重复项”的袋子。

Make SetAdd to Set 和 Contains in Set 是操作集合最核心的三个节点。下面我将通过一个具体的“游戏成就系统”案例,详细介绍每个节点的完整操作步骤。


概念准备:集合(Set)的核心特性

在开始之前,需要先理解集合的两个关键特性:

  1. 元素唯一性:集合中不能存在两个相同的元素。如果试图添加一个已存在的元素,操作将不会成功

  2. 无序性:集合中的元素没有特定的顺序,因此不能像数组(Array)那样通过索引来访问元素

案例场景:管理游戏已解锁的成就

假设我们要制作一个简单的成就系统,需要记录玩家已经解锁了哪些成就,并检查某个成就是否已被解锁。

第一步:创建集合变量

  1. 在蓝图(如ThirdPersonCharacterGameInstance)的 “我的蓝图” 面板中,点击 “+” 按钮新建一个变量。

  2. 将其命名为 UnlockedAchievements

  3. 在 “细节” 面板中,点击变量类型(默认为Boolean),在弹出的菜单中:

    • 首先选择 “容器类型” 为 “集” 

    • 然后选择 “集类型” 为 “字符串” (或Name枚举等,用于标识不同的成就)。

  4. 点击 “编译” 按钮。编译后,你可以在 “默认值” 中为这个集合预设一些初始成就


1. Make Set 节点:创建临时集合

Make Set 节点的作用是从一系列项目中创建一个新的临时集合。它通常用于生成一个集合,供其他节点(如Contains in Set)使用,而无需预先定义变量。

操作步骤:

  1. 在蓝图的事件图表中,右键单击空白处,在搜索框中输入 Make Set 并选择该节点

  2. 节点创建后,默认会有一个输入引脚 [0]。你可以点击节点上的 “添加引脚” 按钮来增加更多输入,每个引脚对应集合中的一个元素

  3. 将你想放入集合的值连接到这些输入引脚上。

案例应用:

假设游戏中有三个基础成就,我们想检查玩家是否全部解锁。可以这样操作:

  1. 创建一个 Make Set 节点,添加三个引脚,分别填入字符串值:"FirstBlood""Explorer""Collector"

  2. 这个节点的输出 Set 就是一个包含这三个字符串的临时集合。

注意Make Set 创建的是临时集合,它不会修改或保存到任何变量中,只用于当前流程的即时操作。


2. Add to Set 节点:向集合添加元素

Add to Set 节点(在蓝图中显示为 ADD )用于向一个已有的集合变量中添加一个新元素。如果该元素已存在于集合中,则添加操作会被忽略

操作步骤:

  1. 从 UnlockedAchievements 变量节点拖出引线,松开鼠标,在菜单中选择 “设置 UnlockedAchievements” (即Set节点)。

  2. 或者,直接在图表中右键单击搜索 Add,选择“Utilities” > “Set”下的 Add 节点

  3. 将 Add 节点的 Target Set 引脚连接到你的集合变量 UnlockedAchievements 上

  4. 将你想要添加的新元素值连接到 New Item 引脚上

  5. 用执行线(白色箭头)连接 Add 节点的 In 和 Out 引脚,确保逻辑顺序正确。

案例应用:

当玩家完成某个动作(如击败第一个敌人)时,解锁“FirstBlood”成就:

  1. 在“击败敌人”的逻辑后面,放置一个 Add to Set 节点。

  2. 将 UnlockedAchievements 变量连接到 Target Set

  3. 将字符串 "FirstBlood" 连接到 New Item

  4. 当此逻辑执行时,"FirstBlood" 就会被添加到 UnlockedAchievements 集合中。


3. Contains in Set 节点:检查元素是否存在

Contains in Set 节点(在蓝图中显示为 CONTAINS 或 Contains Item )用于检查一个集合中是否包含某个特定的元素。如果包含,则输出 True,否则输出 False

操作步骤:

  1. 在图表中右键单击搜索 Contains,选择 Contains Item 节点

  2. 将 Contains Item 节点的 Target Set 引脚连接到你要查询的集合变量上

  3. 将你要查找的元素值连接到 Item to Find 引脚上

  4. 该节点的 Return Value 引脚(布尔值)就是检查结果。

案例应用:

在游戏主界面上,我们想根据玩家是否解锁了“Collector”成就来显示不同的提示:

  1. 放置一个 Contains in Set 节点。

  2. 将 UnlockedAchievements 变量连接到 Target Set

  3. 将字符串 "Collector" 连接到 Item to Find

  4. 从 Contains 节点的 Return Value 引出一条线,连接到一个 Branch(分支)节点的 Condition 引脚。

  5. 在 Branch 的 True 执行引脚上,连接显示“恭喜你已解锁收藏家成就!”的逻辑;在 False 引脚上,连接显示“继续探索以解锁收藏家成就!”的逻辑。


综合案例:完整的成就解锁与检查流程

下面是一个综合运用这三个节点的完整蓝图逻辑示例:

  1. 初始化:在游戏开始时,可以使用 Make Set 节点创建一个包含所有成就ID的临时集合,方便进行批量操作。

  2. 解锁成就:当玩家达成条件时,使用 Add to Set 节点将对应的成就ID添加到 UnlockedAchievements 变量中。

  3. 检查与反馈:在任何需要判断的地方(如UI界面),使用 Contains in Set 节点检查特定成就ID是否存在于 UnlockedAchievements 中,并根据结果执行不同的逻辑。

常用相关节点补充

除了上述三个核心节点,操作集合时还会用到以下常用节点

节点名称 功能描述
Remove 从集合中移除一个指定的元素。
Length 获取集合中当前元素的总个数。
Clear 清空集合中的所有元素。
To Array 将集合转换为数组,便于遍历(因为集合本身没有Get节点)
Union 合并两个集合,返回一个新集合(自动去重)
Intersection 取两个集合的交集,返回一个新集合

重要提示:集合是按值传递的。当你将集合变量连接到节点时,实际上是在操作该集合的副本。因此,对集合的修改(如AddRemove)必须通过Set节点将修改后的副本重新赋值回原变量,才能生效Add to Set节点内部已经封装了这个赋值过程,所以直接使用即可。

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

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

昵称

取消
昵称表情代码图片

    暂无评论内容