使用Set

学习在蓝图中使用Set的方法

Choose your operating system:

Windows

macOS

Linux

workingWithSets_topicBanner.png

蓝图数组 通常是多数设计场景的首选容器。排列是支持重复项的有序列表,可为开发人员提供兼具有序和灵活的容器。打有时使用项目池的开发人员并不关心项目池中各项目的顺序,而是关心项目池内从中提取数据的项目的唯一性。此处便是 蓝图集 的用武之地。

完成本指南后,将获得在蓝图脚本环境中创建和编辑集、查询和显示项目,及在虚幻引擎4(UE4)中蓝图集上执行基本操作(包括交集和合集)的部分经验。

1.必需设置

开始使用蓝图集前,须对项目进行设置,以显示容器的内容。

  1. 使用 游戏 > 第一人称 模板新建一个项目,然后使用下列设置:

    • 选择 蓝图

    • 选择 最高质量

    • 选择 桌面/游戏机

    • 选择 具有初学者内容

  2. 命名你的项目,例如 ExampleSetProject

  3. 在项目的 内容浏览器 中双击 Blueprints 文件夹。

    点击查看大图。

  4. 内容浏览器 中,点击 新增 按钮,将鼠标光标悬停在 蓝图类 上,其位于 创建基本资源(Create Basic Asset) 弹出菜单下。

    点击查看大图。

  5. 打开 选取父类(Pick Parent Class) 菜单后,点击 所有类 箭头,搜索 TextRender Actor 蓝图类。

    Step1_4.png

  6. 搜索栏 中输入 TextRenderActor ,选择 TextRenderActor 蓝图类,然后点击 选择 按钮。

    Step1_5.png

  7. 现在,可在项目的 内容浏览器 中找到新的 TextRender Actor 。然后将新Actor命名为 DisplaySet

    Step1_6.png

  8. 现在,将 DisplaySet TextRender Actor拖入虚幻编辑器的 视角(3D)视口

    点击查看大图。

  9. 选择 DisplaySet TextRender Actor后,点击 +添加组件 按钮(位于 细节 面板中),并在 搜索栏 中输入 Box Collision

    点击查看大图。

  10. 盒体碰撞组件(Box Collision Component) 添加到TextRender Actor后,将新组件命名为 Trigger Box

    Step1_9.png

  11. 现在选择TextRender组件,在 细节 面板中查看Actor的 变换

    Step1_10.png

  12. 更新 显示集 Actor的 变换 ,以反映以下值:

    Step1_11.png

  13. 现在,将 显示集 Actor的 水平对齐 改为 居中 对齐(而非 水平对齐 默认值 对齐)。

    Step1_12.png

  14. 目前, 触发框 组件已 在游戏中隐藏 。取消勾选 在游戏中隐藏 复选框(位于 细节 面板的 渲染 菜单中),即可在游戏中查看 盒体碰撞(Box Collision) 组件。

    Step1_13.png

    在游戏中查看 盒体碰撞 组件是利用底层逻辑驱动触发事件,以调试潜在问题的好办法。

  15. 如进入PIE(在编辑器中运行)模式,可发现发射物会对 显示集 碰撞盒体产生碰撞响应。目前仅需要 显示集 碰撞盒体触发事件,以显示集容器的内容。为此,前往 碰撞 菜单(位于 细节 面板中),点击 碰撞预设 下拉列表框,然后选择 自定义…… 选项。

    Step1_14.png

  16. 最后更新 碰撞预设 反映以下值:

    Step1_15.png

分段结果

点击查看大图。

现在已新建项目,同时设置新的TextRender Actor,其将显示你在下一步中创建、编辑和显示的蓝图集容器的内容。

2.创建和显示蓝图集

已在新建项目中设置 TextRender Actor,现可创建蓝图集容器,其中内容将在游戏内显示。

  1. 在项目的 内容浏览器 中,双击 显示集 TextRender Actor,打开其蓝图 事件图表

    点击查看大图。

  2. 如屏幕显示如下,点击 打开完整蓝图编辑器(Open Full Blueprint Editor) 链接开始操作。

    点击查看大图。

  3. 应可看到 显示集 TextRender Actor蓝图 事件图表 ,可在其中添加蓝图集及其显示逻辑。

    点击查看大图。

    如屏幕未入之前所示那样显示,点击 事件图表 选项卡,打开Actor的蓝图事件图表编辑器。

    点击查看大图。

  4. 现在应创建蓝图集容器,需将之后显示的项目保存其中。要新建蓝图集,点击 +新增 按钮(位于 我的蓝图 面板中),并从下拉列表中选择 变量

    点击查看大图。

  5. 将新变量命名为 Instruction Map

    Step2_5.png

  6. 点击变量命名旁的变量 引脚类型(pin type) 按钮。

    Step2_6.png

  7. 现在选择下拉列表中的 字符串 变量类型。

    Step2_7.png

  8. 点击变量的 容器类型 按钮,其位于 细节 面板中 变量类型 下拉列表旁。

    点击查看大图。

  9. 现在选择下拉列表中的 容器类型。

    Step2_9.png

  10. 此时蓝图图表将进行提示:需编译蓝图,才可定义要存储在容器内的项目。点击 编译 按钮开始操作。

    点击查看大图。

    编译蓝图会将替换容器的 默认值 消息换为其他界面,以便使用字符串类型的唯一项目(或元素)填充容器。

  11. 如尚未完成该步骤,请点击 保存 按钮,保存目前所有工作。

    点击查看大图。

    建议提前并随时进行保存。

  12. 点击 + (添加元素)按钮(位于 细节 面板的 默认值 菜单中),将字符串类型项目添加到新定义的 指令集 容器中。

    点击查看大图。

  13. 定义容器的新项目,将项目定义为 点击

    Step2_13.png

  14. 重复以上的两个步骤,确保使用以下项目填充 指令集 容器:

    Step2_14.png

编写逻辑脚本

显示新建蓝图集的内容前,需编写必要逻辑。

  1. 现已定义容器,继续将 指令集 变量拖入蓝图事件图表。

    点击查看大图。

  2. 指令集 下拉列表中选择 获取

    点击查看大图。

  3. Instruction Set 节点连出引脚,并从 集实用程序(Set Utilities) 界面添加 To Array 节点。

    Step2_17.png

  4. 然后从 To Array 节点连出引线,将其连接到 Get 节点。

    Step2_18.png

    有多种方法可获取集中的值。一种方法是用特定键在集中查询,另一种方法是迭代集中的项目。对于本教程的此章节,将继续使用计数器变量对 指令集 进行迭代。

  5. 牢记之前事项,点击 +添加新增(Add New) 按钮,在下拉列表中选择 变量

    点击查看大图。

  6. 确保将新变量的类型设为 整数 类型,并命名为 Counter

    Step2_20.png

  7. 声明并定义计数器变量后,将 计数器 拖入蓝图事件图表中,并在下拉列表中选择 获取

    点击查看大图。

  8. Counter 节点连出引线,搜索并添加 IncrementInt 节点。

    点击查看大图。

  9. 现在将 IncrementInt 节点连接至 Get 节点。

    Step2_23.png

    本教程中将使用定时器函数来递增 Counter 变量。

  10. Event Tick 节点连出引线,搜索并添加 Delay 节点。

    Step2_24.png

  11. 将延时时长设为 2 秒,然后将 Delay 节点连接至 IncrementInt 节点。

    Step2_25.png

  12. Event BeginPlay 节点连接至 To Array 节点。

    Step2_26.png

  13. 现在已可从 To Array 节点连出引线进行搜索,并连接 Set Text 节点,以便在游戏中显示容器的内容。

    Step2_27.png

  14. Get 节点连接到 引脚(位于 Set Text 节点中)。

    Step2_28.png

  15. 现在将 IncrementInt 节点连接至 Set Text 节点。

    Step2_29.png

  16. 检查完成的脚本后,点击 编译 按钮,之后返回编辑器的 视口 界面。

    点击查看大图。

  17. 在编辑器的 视口 界面中,点击 运行 按钮查看新实现的脚本。

分段结果

本指南目前的章节中,已定义新的蓝图集、项目已填充到容器中,并已使用 TextRender Actor蓝图事件图表中创建的部分基本逻辑显示此类项目值。如要学习更高级的操作方式,请继续下一步骤,可学习执行两个蓝图集的 **交集**的方法。

3.执行交集

现在应该已具有了 TextRender Actor,其将显示在上一步中定义的蓝图集的内容。在此步骤中,将可学习执行两个蓝图集的 交集 ,最终在游戏的 视口 中打印交集结果的方法。

  1. 在项目的 内容浏览器 中,双击 显示集 TextRender Actor,打开其蓝图 事件图表

    点击查看大图。

  2. 应可看到 显示集 TextRender Actor蓝图 事件图表 ,可在其中添加新蓝图集,与现有的 指令集 进行 交集 ,最终将结果集显示到 视口

    点击查看大图。

  3. 在本教程的此步骤中,需创建之后交集的数个蓝图集容器。右键点击 Instruction Set 变量,并在下拉列表中选择 复制 ,新建两个蓝图集变量,并分别命名为 Shorter Instruction Set Resultant Instruction Set

    Step3_3.png

    在两个集上执行交集时,(通常)会产生仅包含两个集共有项目的结果集。

  4. 现应拥有从现有 Instruction Set 变量复制而来的两个新蓝图集变量。此外还需注意:如选择新的蓝图集(例如, 结果指令集 ),应会出现 默认值 消息,内容为 Please compile the blueprint

    点击查看大图。

  5. 点击 编译 按钮。

    点击查看大图。

  6. 编译蓝图后,应可看到 默认值 消息消失,为部分现有元素让出空间。正如所知,已复制现有 Instruction Set 变量,以新建两个变量,从而将最初包含在原始蓝图集中的元素复制到新建容器中。

    Step3_6.png

    注意:也可在不复制现有变量的情况下,新建变量。

  7. 要清除 结果指令集 ,请点击 默认值 菜单中的 删除所有项目(Removes all items) 按钮。

    点击查看大图。

  8. 现在清除 较短指令集(Shorter Instruction Set) 中的项目(或元素)。

    点击查看大图。

  9. 向现有蓝图事件图表添加新逻辑前,先将 Shorter Instruction Set Instruction Set 变量拖入蓝图。

    点击查看大图。

编写逻辑脚本

  1. 要开始构建新逻辑,从 集实用程序 界面中 Shorter Instruction Set 节点连出引线并添加 Intersection 节点。

    Step3_10.png

  2. 现在将 Instruction Set 节点连接至 Intersection 节点。

    Step3_11.png

  3. 右键点击蓝图图表,打开 快捷菜单 ,在其中搜索并添加 Event ActorBeginOverlap

    Step3_12.png

  4. Event ActorBeginOverlap 节点的 Other Actor 引脚连出引线,搜索并添加 Cast To FirstPersonProjectile 节点。

    Step3_13.png

  5. 现在将 Cast To FirstPersonProjectile 节点连接至 Intersection 节点。

    Step3_14.png

    此操作意味着,如第一人称发射物成功与该Actor的碰撞盒体发生碰撞,即调用 Intersection 节点。

  6. Intersection 节点在 较短指令集 指令集 上执行操作后,需将结果存储于 结果指令集 容器中。为此,从 Intersection 节点连出引线,并添加 Set Resultant Instruction Set

    Step3_15.png

  7. Set Resultant Instruction Set 节点连出引线,并从 集实用程序 界面添加 To Array 节点。

    Step3_16.png

  8. 要迭代阵列的元素,从 To Array 节点连出引线并添加 ForEachLoop 节点。

    Step3_17.png

  9. To Array 节点与 ForEachLoop 节点相连。

    Step3_18.png

  10. 现在可将交集的结果打印到 视口 中了。为此,从 ForEachLoop 节点的 阵列元素 引脚连出引线,搜索并添加 Print String 节点。

    Step3_19.png

  11. ForEachLoop 节点连接至 Print String 节点。

    Step3_20.png

  12. 现在已可决定 结果指令集 要包含的内容。例如,在本例中, Resultant Instruction Set 变量需仅包含 点击 左键 鼠标 按钮 。首先在纸上写出交集:

    Instruction Set

    Shorter Instruction Set

    Resultant Instruction Set (A ∩ B)

    Click

    Click

    Click

    the

    Left

    Left

    Left

    Mouse

    Mouse

    Mouse

    Button

    Button

    Button

    and

    Fire

    正如纸上所写, 指令集 较短指令集 的共有项目都存储在 结果集 容器中。在集上执行逻辑运算时,将逻辑写入蓝图图表脚本前,最好先在纸上(或白板上)写下需执行的运算。

  13. 现在已了解需在 较短指令集 容器中存储的项目,选择 较短指令集 ,检查容器的内容。

    点击查看大图。

    高亮图像中显示, 较短指令集 当前为空白集。现在如要执行 较短指令集 指令集 的交集, 结果指令集 容器将为空白。

  14. 使用以下元素填充 较短指令集 容器:

    Step3_22.png

  15. 脚本检查完成后,点击 编译 按钮。

    点击查看大图。

  16. 最后点击 保存 按钮,然后返回编辑器的 视口 界面。

    点击查看大图。

  17. 在编辑器的 视口 界面中,点击 运行 按钮查看当前运行的更新脚本。

    点击查看大图。

分段结果

正如视频中所见,第一人称发射物与 显示集合 碰撞盒体碰撞时, 结果指令集 的内容会被打印到 视口 中。查看打印的项目时,可发现 结果指令集 中包含的项目并无可预测顺序,其是蓝图集的属性。继续学习下一步,掌握执行两个蓝图集的 合集

4.执行合集

此为本教程最后步骤,在其中可学会执行两个蓝图集的 合集 ,最终在游戏的 视口 中打印合集的结果。

  1. 在项目的 内容浏览器 中,双击 显示集 TextRender Actor,打开其蓝图 事件图表

    点击查看大图。

  2. 在本教程的此步骤中,需新建之后合集的蓝图集容器。右键点击 Shorter Instruction Set 变量,并在下拉列表中选择 复制 以新建蓝图集变量,将其命名为 Longer Instruction Set

    Step4_2.png

  3. 现在点击 编译 按钮。

    点击查看大图。

  4. 点击 删除所有项目 按钮,清除 较长指令集 中的所有项目。

    点击查看大图。

  5. 将以下项目添加到新的 较长指令集 容器中:

    Step4_5.png

  6. Longer Instruction Set Instruction Set 变量拖入蓝图图表。

    点击查看大图。

编写逻辑脚本

  1. 要开始构建新逻辑,从 集实用程序 界面中的 Longer Instruction Set 连出引线并添加 Union 节点。

    Step4_7.png

  2. Instruction Set 节点连接至 Union 节点。

    Step4_8.png

  3. Cast To FirstPersonProjectile 节点的 Cast Failed 引脚连接至 Union 节点。

    Step4_9.png

  4. 然后,从 Union 节点连出引线,搜索并添加 To Array 节点。

    Step4_10.png

  5. To Array 节点连出引线,搜索并添加 ForEachLoop 节点。

    Step4_11.png

  6. To Array 节点连接至 ForEachLoop 节点。

    Step4_12.png

  7. 现在已可将合集结果打印到 视口 中了。为此,从 ForEachLoop 节点的 阵列元素 引脚连出引线,搜索并添加 Print String 节点。

    Step4_13.png

  8. ForEachLoop 节点连接至 Print String 节点。

    Step4_14.png

  9. 由于已打印调试消息,因此需更改打印到 视口 的文本颜色。为此,点击位于 Print String 节点底部的菜单扩展箭头。

    Step4_15.png

  10. 点击 文本颜色 框打开 取色器 菜单。

    Step4_16.png

  11. 将颜色设置为以下值:

    Step4_17.png

  12. 现在点击 编译 按钮。

    点击查看大图。

  13. 完成脚本后,点击 保存 按钮,然后返回编辑器的 视口 界面。

    点击查看大图。

  14. 在编辑器的 视口 界面中,点击 运行 按钮查看当前运行的更新脚本。

    点击查看大图。

最终结果

正如视频中所见,第一人称角色与 显示集 碰撞盒体碰撞时, 合集 的结果会被打印到 视口 中。查看打印的项目时,同样可发现此类项目并无可预测顺序,其是蓝图集的属性。最后请注意:在纸上写下执行两个蓝图集的合集运算时,可得到以下结果:

Instruction Set

Longer Instruction Set

Resultant Output (A ∪ B)

Click

your

Click

the

Gun

the

Left

Left

Mouse

Mouse

Button

Button

and

and

Fire

Fire

your

Gun

欢迎帮助改进虚幻引擎文档!请告诉我们该如何更好地为您服务。
填写问卷调查
取消