天天看点

《Unreal Engine 4蓝图可视化编程》一1.4 创建第一个蓝图

本节书摘来异步社区《unreal engine 4蓝图可视化编程》一书中的第1章,第1.4节,作者: brenden sewell 译者: 陈东林 责编: 胡俊英,更多章节内容可以访问云栖社区“异步社区”公众号查看。

现在游戏世界中放置了一个圆柱体,在当圆柱体被击中时,我们需要为圆柱体赋上前一节创建的材质。最后一个交互是游戏逻辑判断圆柱体被选择,然后将圆柱体的材质改变为红色材质。为了创建这一行为并添加到圆柱体上,我们需要创建一个蓝图。创建蓝图的方式有很多种,但是为了简便,我们可以创建蓝图并直接添加给圆柱体。为此,确保在场景中选中了cylindertarget对象。单击细节面板顶端的蓝色蓝图/添加脚本(blueprint/add script)按钮,将可看到路径选择窗口。

在这个项目中, 我们把所有的蓝图存放在firstpersonbp文件夹的子文件夹blueprints下,因为这个蓝图是为cylindertarget actor创建的,所以文件名为默认的cylinder- target_blueprint即可,如图1.13所示。

《Unreal Engine 4蓝图可视化编程》一1.4 创建第一个蓝图

现在内容浏览器(content browser)的firstpersonbp >> blueprints文件夹中可以看到cylindertarget_blueprint。双击打开该蓝图的蓝图编辑器,我们将看到圆柱体的视口视图,如图1.14所示。我们可以操作actor的一些默认属性或者增加更多的组件,它们都包括很多自有逻辑使得actor更加复杂。我们将在后续章节中探讨组件(components),现在,我们需要创建一个简单的蓝图并直接赋给actor。为此,单击视口标签旁边的事件图表(event graph)标签。

图1.14 视口视图

事件图表(见图1.15)看起来应该很熟悉,因为它与我们之前使用的材质编辑器的视觉效果和功能上由很多相似之处。默认情况下,打开事件图表时会有3个未连接也未使用的事件节点。事件(event)指游戏中的一些动作(action),它作为蓝图做某件事情的触发器。大多数蓝图遵循如下结构:事件(when)|条件(if)动作(do)。这个可以被文字描述为:当某件事情发生时,检查x、y、z是否为真,如果为真,完成这一系列的动作。举个例子,蓝图定义了我是否开枪,流程如下:当(when)扣动扳机,如果(if)子弹已上膛,进行(do)射击。

在事件图表中,列出的3个默认事件节点是用的最多的事件触发器。当玩家(player)第一次开始玩游戏时触发事件begin play。当另一个actor开始与蓝图控制的现有actor发生触碰或重叠时触发事件actor begin overlap。事件tick在游戏运行的每一帧触发与之关联的动作,帧率决定于电脑的配置,也影响着事件tick触发动作的频率。

我们希望每次射弹击中圆柱体时,都能触发“改变材质”这一动作。可以使用事件actor begin overlap节点来探测射弹对象与目标的网格是否重叠。我们将通过仅当另一个actor触发目标actor时检测来简化这些。以一个简洁的页面开始吧,选中所有的默认事件,单击键盘的[delete]键把它们都删除。

《Unreal Engine 4蓝图可视化编程》一1.4 创建第一个蓝图

为了创建检测事件,在图表空白区域单击鼠标右键,搜索框中输入“hit”,如图1.16所示。找到事件hit(event hit)节点并选择,当这个蓝图控制的actor被另一个actor触发的事件hit。

当在事件图表中添加了事件hit节点后,会看到事件hit节点上有许多颜色各异的输出引脚。首先注意到节点右上角的白色类似三角形的引脚,这是执行引脚(execution pin)。它定义了动作序列中下一步要执行的动作。将不同节点的执行引脚连接在一起便组成了所有蓝图的基本功能。既然拥有了触发器,那我们就需要找到一个动作,这个动作可以让我们能够改变actor的材质。

《Unreal Engine 4蓝图可视化编程》一1.4 创建第一个蓝图

从执行引脚拖出一根引线至节点右端的空白区域,将自动出现一个搜索窗口,允许我们创建一个节点并将它与执行引脚相连。确认搜索框内勾选了情境关联(context sensitive)。这样将搜索结果限制在能够被添加的节点中。在搜索框内键入“set material”,选取set material(staticmeshcomponent)节点。

注意 小贴士  如果在勾选了情境关联的情况下搜索不到想查找的节点,可尝试去勾选重新搜索。即使这个节点在情境关联搜索时查找不到,它仍有可能可以添加到蓝图逻辑当中。

事件hit节点中的动作(action)如图1.17所示。

《Unreal Engine 4蓝图可视化编程》一1.4 创建第一个蓝图

当用户将set material节点放置到蓝图中后,便会注意到它已经与事件hit节点的执行引脚连接。当蓝图的actor被另外的actor击中时,蓝图现在将会执行set material动作。然而,我们现在还没有设置响应set material时将要调用的材质。

为了设置将调用的材质,单击set material节点中的选择资源(select asset),调出下拉列表,在搜索框内输入“red”来搜索之前创建的targetred材质。查找到该材质后单击它,将该资源添加到set material节点的材质区域,如图1.18所示。

我们现在已经做好了改变目标圆柱体颜色的蓝图的准备工作,但是在保存(save)蓝图之前,还需要编译一下。编译是将蓝图语言转换为告诉计算机该如何操作的机器指令。单击编辑器工具左上角的编译(compile)按钮,然后单击保存。

《Unreal Engine 4蓝图可视化编程》一1.4 创建第一个蓝图

既然我们已经设置了一个基础的游戏交互,运行测试一下,确保结果是否达到预期。关闭蓝图编辑器,在ue编辑器中单击播放按钮运行游戏,尝试跑动和射击,与我们之前创建的cylindertarget actor发生碰撞,如图1.19所示。

《Unreal Engine 4蓝图可视化编程》一1.4 创建第一个蓝图

当运行游戏的时候,会看到目标圆柱体在被子弹击中时,确实改变了颜色。这是游戏框架的初始,它可以用于接收敌人对于玩家(player)动作的反馈。你或许也会注意到玩家碰到目标圆柱体时,圆柱体也会改变颜色,然而我们希望只有子弹击中目标时才改变目标颜色。这些不可预见的结果在游戏开发过程中很普遍,最好避免的方法就是频繁地测试我们正在创建的游戏。

为了修正蓝图中的bug,让它仅对子弹击中时做出反应并改变目标颜色,回到cylinder target_blueprint蓝图,继续查看事件hit节点。

在事件hit节点上余下的输出引脚,它们是存储着关于事件数据的一些变量。这些数据可以被传递到其他节点。引脚的颜色代表着变量的数据类型,蓝色引脚传递对象(object),例如actor;红色引脚包含一个布尔型(true/false)变量。

随着接触更复杂的蓝图,我们将学习更多的引脚类型,但现在,我们只需要关心蓝色的other输出引脚。它包含其他actor的碰撞触发事件hit的数据。这个在确保目标圆柱体只在被子弹击中时改变颜色很有用,而其他的actor碰到目标时不改变颜色。

为了确保仅对子弹做出响应,断开事件hit节点与setmaterial节点之间的连接(断开引脚连接的方法之一为:按住[alt]键,然后鼠标左键单击连线),从other引脚拖出一根引线到空白区域,在搜索框内键入“projectile”,找到“类型转换为firstpersonprojectile(cast to firstpersonprojectile)”并选择,如图1.20所示。

firstpersonprojectile是ue4引擎的第一人称模板中的蓝图,控制着子弹的行为。该节点使用类型转换来确保:只有在子弹actor击中与转换节点引用的对象相匹配的圆柱体时,才将动作附加到节点的执行引脚。

《Unreal Engine 4蓝图可视化编程》一1.4 创建第一个蓝图

当节点出现时,可以看到在事件hit的other输出引脚和转换节点的object引脚之间有一根蓝色的线相连(如果没有自动连接,可以手动连上)。连接firstpersonprojectile节点的输出执行引脚和set material节点的输入执行引脚,如图1.21所示。

《Unreal Engine 4蓝图可视化编程》一1.4 创建第一个蓝图

现在编译、保存,关闭蓝图界面后单击播放按钮进行测试。现在你会发现玩家碰到目标圆柱体时不会改变圆柱体颜色,只有子弹击中时才可以。

继续阅读