Choose your operating system:
Windows
macOS
Linux
蓝图数组 通常是多数设计场景的首选容器。排列是支持重复项的有序列表,可为开发人员提供兼具有序和灵活的容器。打有时使用项目池的开发人员并不关心项目池中各项目的顺序,而是关心项目池内从中提取数据的项目的唯一性。此处便是 蓝图集 的用武之地。
完成本指南后,将获得在蓝图脚本环境中创建和编辑集、查询和显示项目,及在虚幻引擎4(UE4)中蓝图集上执行基本操作(包括交集和合集)的部分经验。
1.必需设置
开始使用蓝图集前,须对项目进行设置,以显示容器的内容。
-
使用 游戏 > 第一人称 模板新建一个项目,然后使用下列设置:
-
选择 蓝图
-
选择 最高质量
-
选择 桌面/游戏机
-
选择 具有初学者内容
-
-
命名你的项目,例如 ExampleSetProject 。
-
在项目的 内容浏览器 中双击 Blueprints 文件夹。
-
在 内容浏览器 中,点击 新增 按钮,将鼠标光标悬停在 蓝图类 上,其位于 创建基本资源(Create Basic Asset) 弹出菜单下。
-
打开 选取父类(Pick Parent Class) 菜单后,点击 所有类 箭头,搜索 TextRender Actor 蓝图类。
-
在 搜索栏 中输入
TextRenderActor
,选择 TextRenderActor 蓝图类,然后点击 选择 按钮。 -
现在,可在项目的 内容浏览器 中找到新的 TextRender Actor 。然后将新Actor命名为
DisplaySet
。 -
现在,将
DisplaySet
TextRender Actor拖入虚幻编辑器的 视角(3D)视口 。 -
选择 DisplaySet TextRender Actor后,点击 +添加组件 按钮(位于 细节 面板中),并在 搜索栏 中输入
Box Collision
。 -
将 盒体碰撞组件(Box Collision Component) 添加到TextRender Actor后,将新组件命名为
Trigger Box
。 -
现在选择TextRender组件,在 细节 面板中查看Actor的 变换 。
-
更新 显示集 Actor的 变换 ,以反映以下值:
-
现在,将 显示集 Actor的 水平对齐 改为 居中 对齐(而非 水平对齐 默认值 左 对齐)。
-
目前, 触发框 组件已 在游戏中隐藏 。取消勾选 在游戏中隐藏 复选框(位于 细节 面板的 渲染 菜单中),即可在游戏中查看 盒体碰撞(Box Collision) 组件。
在游戏中查看 盒体碰撞 组件是利用底层逻辑驱动触发事件,以调试潜在问题的好办法。
-
如进入PIE(在编辑器中运行)模式,可发现发射物会对 显示集 碰撞盒体产生碰撞响应。目前仅需要 显示集 碰撞盒体触发事件,以显示集容器的内容。为此,前往 碰撞 菜单(位于 细节 面板中),点击 碰撞预设 下拉列表框,然后选择 自定义…… 选项。
-
最后更新 碰撞预设 反映以下值:
分段结果
现在已新建项目,同时设置新的TextRender Actor,其将显示你在下一步中创建、编辑和显示的蓝图集容器的内容。
2.创建和显示蓝图集
已在新建项目中设置 TextRender Actor,现可创建蓝图集容器,其中内容将在游戏内显示。
-
在项目的 内容浏览器 中,双击 显示集 TextRender Actor,打开其蓝图 事件图表 。
-
如屏幕显示如下,点击 打开完整蓝图编辑器(Open Full Blueprint Editor) 链接开始操作。
-
应可看到 显示集 TextRender Actor蓝图 事件图表 ,可在其中添加蓝图集及其显示逻辑。
-
现在应创建蓝图集容器,需将之后显示的项目保存其中。要新建蓝图集,点击 +新增 按钮(位于 我的蓝图 面板中),并从下拉列表中选择 变量 。
-
将新变量命名为
Instruction Map
。 -
点击变量命名旁的变量 引脚类型(pin type) 按钮。
-
现在选择下拉列表中的 字符串 变量类型。
-
点击变量的 容器类型 按钮,其位于 细节 面板中 变量类型 下拉列表旁。
-
现在选择下拉列表中的 集 容器类型。
-
此时蓝图图表将进行提示:需编译蓝图,才可定义要存储在容器内的项目。点击 编译 按钮开始操作。
编译蓝图会将替换容器的 默认值 消息换为其他界面,以便使用字符串类型的唯一项目(或元素)填充容器。
-
如尚未完成该步骤,请点击 保存 按钮,保存目前所有工作。
建议提前并随时进行保存。
-
点击 + (添加元素)按钮(位于 细节 面板的 默认值 菜单中),将字符串类型项目添加到新定义的 指令集 容器中。
-
定义容器的新项目,将项目定义为
点击
。 -
重复以上的两个步骤,确保使用以下项目填充 指令集 容器:
编写逻辑脚本
显示新建蓝图集的内容前,需编写必要逻辑。
-
现已定义容器,继续将 指令集 变量拖入蓝图事件图表。
-
在 指令集 下拉列表中选择 获取 。
-
从 Instruction Set 节点连出引脚,并从 集实用程序(Set Utilities) 界面添加 To Array 节点。
-
然后从 To Array 节点连出引线,将其连接到 Get 节点。
有多种方法可获取集中的值。一种方法是用特定键在集中查询,另一种方法是迭代集中的项目。对于本教程的此章节,将继续使用计数器变量对 指令集 进行迭代。
-
牢记之前事项,点击 +添加新增(Add New) 按钮,在下拉列表中选择 变量 。
-
确保将新变量的类型设为 整数 类型,并命名为
Counter
。 -
声明并定义计数器变量后,将 计数器 拖入蓝图事件图表中,并在下拉列表中选择 获取 。
-
从 Counter 节点连出引线,搜索并添加 IncrementInt 节点。
-
现在将 IncrementInt 节点连接至 Get 节点。
本教程中将使用定时器函数来递增 Counter 变量。
-
从 Event Tick 节点连出引线,搜索并添加 Delay 节点。
-
将延时时长设为 2 秒,然后将 Delay 节点连接至 IncrementInt 节点。
-
将 Event BeginPlay 节点连接至 To Array 节点。
-
现在已可从 To Array 节点连出引线进行搜索,并连接 Set Text 节点,以便在游戏中显示容器的内容。
-
将 Get 节点连接到 值 引脚(位于 Set Text 节点中)。
-
现在将 IncrementInt 节点连接至 Set Text 节点。
-
检查完成的脚本后,点击 编译 按钮,之后返回编辑器的 视口 界面。
-
在编辑器的 视口 界面中,点击 运行 按钮查看新实现的脚本。
分段结果
本指南目前的章节中,已定义新的蓝图集、项目已填充到容器中,并已使用 TextRender Actor蓝图事件图表中创建的部分基本逻辑显示此类项目值。如要学习更高级的操作方式,请继续下一步骤,可学习执行两个蓝图集的 **交集**的方法。
3.执行交集
现在应该已具有了 TextRender Actor,其将显示在上一步中定义的蓝图集的内容。在此步骤中,将可学习执行两个蓝图集的 交集 ,最终在游戏的 视口 中打印交集结果的方法。
-
在项目的 内容浏览器 中,双击 显示集 TextRender Actor,打开其蓝图 事件图表 。
-
应可看到 显示集 TextRender Actor蓝图 事件图表 ,可在其中添加新蓝图集,与现有的 指令集 进行 交集 ,最终将结果集显示到 视口 。
-
在本教程的此步骤中,需创建之后交集的数个蓝图集容器。右键点击 Instruction Set 变量,并在下拉列表中选择 复制 ,新建两个蓝图集变量,并分别命名为
Shorter Instruction Set
和Resultant Instruction Set
。在两个集上执行交集时,(通常)会产生仅包含两个集共有项目的结果集。
-
现应拥有从现有 Instruction Set 变量复制而来的两个新蓝图集变量。此外还需注意:如选择新的蓝图集(例如, 结果指令集 ),应会出现 默认值 消息,内容为
Please compile the blueprint
。 -
点击 编译 按钮。
-
编译蓝图后,应可看到 默认值 消息消失,为部分现有元素让出空间。正如所知,已复制现有 Instruction Set 变量,以新建两个变量,从而将最初包含在原始蓝图集中的元素复制到新建容器中。
注意:也可在不复制现有变量的情况下,新建变量。
-
要清除 结果指令集 ,请点击 默认值 菜单中的 删除所有项目(Removes all items) 按钮。
-
现在清除 较短指令集(Shorter Instruction Set) 中的项目(或元素)。
-
向现有蓝图事件图表添加新逻辑前,先将 Shorter Instruction Set 和 Instruction Set 变量拖入蓝图。
编写逻辑脚本
-
要开始构建新逻辑,从 集实用程序 界面中 Shorter Instruction Set 节点连出引线并添加 Intersection 节点。
-
现在将 Instruction Set 节点连接至 Intersection 节点。
-
右键点击蓝图图表,打开 快捷菜单 ,在其中搜索并添加 Event ActorBeginOverlap 。
-
从 Event ActorBeginOverlap 节点的 Other Actor 引脚连出引线,搜索并添加 Cast To FirstPersonProjectile 节点。
-
现在将 Cast To FirstPersonProjectile 节点连接至 Intersection 节点。
此操作意味着,如第一人称发射物成功与该Actor的碰撞盒体发生碰撞,即调用 Intersection 节点。
-
Intersection 节点在 较短指令集 和 指令集 上执行操作后,需将结果存储于 结果指令集 容器中。为此,从 Intersection 节点连出引线,并添加 Set Resultant Instruction Set 。
-
从 Set Resultant Instruction Set 节点连出引线,并从 集实用程序 界面添加 To Array 节点。
-
要迭代阵列的元素,从 To Array 节点连出引线并添加 ForEachLoop 节点。
-
将 To Array 节点与 ForEachLoop 节点相连。
-
现在可将交集的结果打印到 视口 中了。为此,从 ForEachLoop 节点的 阵列元素 引脚连出引线,搜索并添加 Print String 节点。
-
将 ForEachLoop 节点连接至 Print String 节点。
-
现在已可决定 结果指令集 要包含的内容。例如,在本例中, 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
正如纸上所写, 指令集 和 较短指令集 的共有项目都存储在 结果集 容器中。在集上执行逻辑运算时,将逻辑写入蓝图图表脚本前,最好先在纸上(或白板上)写下需执行的运算。
-
现在已了解需在 较短指令集 容器中存储的项目,选择 较短指令集 ,检查容器的内容。
高亮图像中显示, 较短指令集 当前为空白集。现在如要执行 较短指令集 与 指令集 的交集, 结果指令集 容器将为空白。
-
使用以下元素填充 较短指令集 容器:
-
脚本检查完成后,点击 编译 按钮。
-
最后点击 保存 按钮,然后返回编辑器的 视口 界面。
-
在编辑器的 视口 界面中,点击 运行 按钮查看当前运行的更新脚本。
分段结果
正如视频中所见,第一人称发射物与 显示集合 碰撞盒体碰撞时, 结果指令集 的内容会被打印到 视口 中。查看打印的项目时,可发现 结果指令集 中包含的项目并无可预测顺序,其是蓝图集的属性。继续学习下一步,掌握执行两个蓝图集的 合集 。
4.执行合集
此为本教程最后步骤,在其中可学会执行两个蓝图集的 合集 ,最终在游戏的 视口 中打印合集的结果。
-
在项目的 内容浏览器 中,双击 显示集 TextRender Actor,打开其蓝图 事件图表 。
-
在本教程的此步骤中,需新建之后合集的蓝图集容器。右键点击 Shorter Instruction Set 变量,并在下拉列表中选择 复制 以新建蓝图集变量,将其命名为
Longer Instruction Set
。 -
现在点击 编译 按钮。
-
点击 删除所有项目 按钮,清除 较长指令集 中的所有项目。
-
将以下项目添加到新的 较长指令集 容器中:
-
将 Longer Instruction Set 和 Instruction Set 变量拖入蓝图图表。
编写逻辑脚本
-
要开始构建新逻辑,从 集实用程序 界面中的 Longer Instruction Set 连出引线并添加 Union 节点。
-
将 Instruction Set 节点连接至 Union 节点。
-
将 Cast To FirstPersonProjectile 节点的 Cast Failed 引脚连接至 Union 节点。
-
然后,从 Union 节点连出引线,搜索并添加 To Array 节点。
-
从 To Array 节点连出引线,搜索并添加 ForEachLoop 节点。
-
将 To Array 节点连接至 ForEachLoop 节点。
-
现在已可将合集结果打印到 视口 中了。为此,从 ForEachLoop 节点的 阵列元素 引脚连出引线,搜索并添加 Print String 节点。
-
将 ForEachLoop 节点连接至 Print String 节点。
-
由于已打印调试消息,因此需更改打印到 视口 的文本颜色。为此,点击位于 Print String 节点底部的菜单扩展箭头。
-
点击 文本颜色 框打开 取色器 菜单。
-
将颜色设置为以下值:
-
现在点击 编译 按钮。
-
完成脚本后,点击 保存 按钮,然后返回编辑器的 视口 界面。
-
在编辑器的 视口 界面中,点击 运行 按钮查看当前运行的更新脚本。
最终结果
正如视频中所见,第一人称角色与 显示集 碰撞盒体碰撞时, 合集 的结果会被打印到 视口 中。查看打印的项目时,同样可发现此类项目并无可预测顺序,其是蓝图集的属性。最后请注意:在纸上写下执行两个蓝图集的合集运算时,可得到以下结果:
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 |