Unreal Engine 4蓝图可视化编程(txt+pdf+epub+mobi电子书下载)


发布时间:2020-10-09 07:46:46

点击下载

作者:(美)Brenden Sewell 西威尔

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Unreal Engine 4蓝图可视化编程

Unreal Engine 4蓝图可视化编程试读:

前言

游戏引擎(例如虚幻引擎4)作为强大的商业游戏的制作工具,越来越受传统游戏工作室以外的新老游戏开发者所欢迎。虚幻引擎为过去10年中发布的许多最受欢迎的控制台和PC游戏提供了动力,最新版本的虚幻引擎尽可能地包含了开发者所需的工具。这些工具中最具变革性的是蓝图可视化编程系统,其允许非专业程序人员创建和实现游戏机制、用户界面(User Interface,UI)和交互。

本书采用分步方法,指导读者使用可视化的蓝图节点构成蓝图行为,并将它们链接在一起以创建游戏机制、UI等。在这个过程中,读者将学习所有使用蓝图在虚幻引擎4中开发游戏的必要技能。

我们从基础的第一人称射击模板开始,每个章节将扩展原型,以创建一个越来越复杂和稳定的游戏体验。从创造基本的射击机制逐渐过渡到更复杂的系统,将生成用户界面和智能敌人行为。学完这本书时,你将完成一个功能齐全的第一人称射击游戏,在游戏开发过程中学会一些必要的技能。本书包含的内容

第1章,使用蓝图进行对象交互,首先介绍如何将新对象导入到关卡中,以构建游戏世界。然后修改对象的材质,通过材质编辑器进行设置,在运行时通过蓝图改变对象的材质。

第2章,升级玩家的功能,教你如何使用蓝图在游戏过程中生成新对象,并将蓝图中的动作链接到玩家控制输入。你还将学习创建蓝图,允许对象对发射的子弹做出碰撞反应。

第3章,创建屏幕UI元素,设置图形用户界面(Graphical User Interface,GUI),跟踪玩家的血量、体力、弹药数量和游戏目标的数值。在这里,读者将学习如何使用虚幻引擎的GUI编辑器设置基本用户界面,以及如何使用蓝图将界面链接到游戏中的数值。

第4章,创建约束和游戏性对象,内容包括如何限制玩家的能力,定义游戏关卡的游戏目标,并通过与上一章中创建的GUI元素交互的蓝图跟踪这些目标。我们通过设置可收集的弹药包,填充玩家的弹药,并且利用关卡蓝图来定义游戏的胜利条件。

第5章,使用AI制作移动的敌人。这是关键的一章,涵盖了如何创建一个敌人的AI,敌人将在关卡中追逐玩家。我们通过在关卡中设置一个导航网格,并使用蓝图让敌人在巡逻点之间徘徊。

第6章,升级AI敌人,通过修改敌人的AI,赋予敌人一定的判断能力,以创建一个有趣的游戏体验。在本章中,我们使用视觉和听觉检测来设置敌人的巡逻、搜索和攻击状态。此外,我们还介绍了游戏过程中逐渐生成新的敌人的方法。

第7章,跟踪游戏状态和完成游戏体验,在确定游戏的最终发布版本之前,我们添加了一些关键的游戏体验。在这一章中,我们创建了使游戏难度逐渐加大的机制,增加了保存游戏的功能,使玩家能够保存他们的游戏进度并回到该进度继续玩耍。本章还添加了玩家死亡机制,使游戏挑战更有意义。

第8章,打包与发行,介绍如何优化图形设置,以获得最佳的游戏性能和视觉效果。然后讲解如何创建一个共享的游戏,并分享一些建议,促使读者超越本书的限制,成为一个成熟的游戏开发者!第1章使用蓝图进行对象交互

当开始开发一个游戏时,你想到的第一步应该是建立一个原型。幸运的是,虚幻引擎4和蓝图让基本的游戏功能实现起来比以往任何时候都更容易。这样用户便可以很快地开始测试自己的想法。为了让大家熟悉虚幻编辑器(Unreal Editor)和蓝图(Blueprint),我们将使用一些自带的资源和蓝图建立游戏玩法机制。

本章我们将学习以下内容。● 创建新的项目和关卡。● 在关卡中置入对象。● 通过蓝图改变对象的材质。● 使用蓝图编辑器链接所有的蓝图。● 编译、保存并试玩游戏。● 使用蓝图移动游戏世界中的对象。1.1 创建项目和关卡

在开始创造游戏元素之前,我们需要创建一个项目,这个项目将包含游戏的内容。为了获取虚幻引擎4(Unreal Engine 4,以下简称UE4),并开始设定我们的项目,需要打开Epic Games launcher,通过它便可以从UE4官网下载UE4引擎。单击Epic Games launcher的UE4标签。如果你是第一次在你的计算机中使用虚幻引擎,你将会看到灰色的未安装(Not Installed)按钮。在Launcher的左侧,会看到一些选项。

工作标签可以让你选择已经安装的引擎版本及已经创建好的项目。现在请单击工作标签,找到黄色的安装按钮并单击,如图1.1所示。图1.1 安装引擎

当引擎已经完成安装时,安装按钮将会变成启动按钮,如图1.2所示。单击任意一个启动按钮即可启动引擎。图1.2 启动引擎1.1.1 为新建的项目设置模板

单击启动按钮后,虚幻项目浏览器(Unreal Project Browser)就会呈现在你眼前。默认显示的是项目标签,它呈现的是已创建的所有工程的缩略图,同时也展示示例工程模板。我们的目的是要新建项目,[1]因此单击新建项目标签。

从新建项目标签下,你可以选择一个模板,这个模板将为游戏项目提供初始的资源;或者用户也可以选择空白(不使用模板)开始你的项目。在新建项目标签下,用户会发现有两个子标签:蓝图和C++。蓝图标签用自身提供的模板创建项目,且该项目自带的蓝图具有一些基本的行为。通过C++ 标签下的模板创建项目,其核心的一些行为都是通过C++ 语言编写的。因为我们想快速启动和运行第一人称射击游戏的原型,而不是从头开始创建基本的控制功能,所以我们要确保已经选择了蓝图标签,然后选择First Person模板,如图1.3所示。图1.3 选择FirstPerson蓝图模板1.1.2 理解项目设置

下一步是根据我们的偏好调整项目设置。在模板选择器下有3个灰色的选项,允许我们选择目标平台(桌面/游戏机、移动设备/平板电脑)、图像级别(最高质量、可缩放的3D或2D)、是否具有初学者内容。这里我们保持默认设置(桌面/游戏机,最高质量,具有初学者内容)。在这3个灰色选项的下面,用户将看到文件存储路径,可以根据自己的偏好将项目存储到硬盘相应路径下,项目名输入框内则需要你输入项目的名称。在这里将项目命名为BlueprintScripting,并将项目保存到操作系统虚幻项目的默认文件夹,如图1.4所示。图1.4 设置项目路径1.1.3 创建项目

既然我们已经选择了模板,并且将项目按自己的偏好设置好了,那么我们就可以单击绿色的创建项目按钮创建项目。当引擎初始化资源和设置项目进程完毕后,虚幻编辑器便会打开关卡编辑器,在关卡编辑器中,你可以创建并预览关卡,放置和修改对象,如果你修改了项目,还可以及时测试。

按下工具栏顶部的播放按钮,如图1.5所示,用户将可以试玩第一人称模板内置的游戏。这个游戏包括了角色移动、发射子弹、使用子弹给立方体对象施加力。在游戏模式中,播放按钮将会变成暂停按钮和停止按钮。用户可以单击暂停按钮暂停游戏,当用户在运行游戏的时候,如果希望知道一个交互或者actor属性,暂停游戏将会很有用。单击停止按钮将会停止运行游戏并返回编辑模式。在继续创作之前,先试玩一下游戏吧。图1.5 工具栏1.2 为关卡添加对象

现在我们希望添加自定义对象到关卡中。在关卡编辑器的中心面板是3D视口,视口为我们呈现游戏的3D内容。这时,熟悉在3D视口中的移动很重要。可以通过使用鼠标按键和拖动鼠标向周围移动控制摄像机来改变视角。在视口中按住鼠标左键并拖动光标将可以操控摄像机向前后左右移动,按住鼠标右键拖动光标将会旋转相机的视角。最后,按住鼠标中键并拖动光标将可以调整相机的位置(上下左右)。[2]

UE4中最简单的对象称为actor。它可以被拖曳到游戏世界中。actor是最基本的对象,除了能够旋转、移动、缩放之外,没有继承其他的行为,但是可以通过添加组件来获取更多的复杂的行为。我们的想法是创建一个简单的目标actor,当使用枪发射子弹击中它时能够改变自身颜色。我们可以在模式(Modes)面板创建一个简单的actor,选中模式(Place)标签,单击基本(Basic)然后拖曳Cylinder到3D视口当中。这个操作将创建一个新的圆柱体(cylinder)actor并置入到关卡中,你将在3D视口和世界大纲视图中看到它,单击鼠标右键>>编辑>>Rename将默认的名称Cylinder重命名为[3]CylinderTarget,如图1.6所示。图1.6 将新建圆柱体重命名为CylinderTarget1.3 材质

之前我们设定的目标是:当圆柱体被射弹击中后,能够改变自身的颜色。因此,我们需要改变圆柱体actor的材质。材质是一种资源,能被添加到actor的网格当中(网格定义了actor的物理形状)。可以认为材质就像油漆一样作用于actor的网格或外形之上。因为actor的材质决定了它的颜色,所以改变actor颜色的方法之一就是将原先的材质替换为另一种颜色的材质。因此,我们首要任务是创建材质,这个材质将使actor呈现红色。1.3.1 创建材质

在内容浏览器里找到FirstPersonBP文件夹,创建子文件夹并命名为Materials,进入Materials目录,在空白处单击鼠标右键,在弹出的菜单表中选择创建高级资源>>材质&贴图>>材质,将新建的材质命名为TargetRed。1.3.2 材质属性与蓝图节点

双击TargetRed材质,打开编辑标签,如图1.7所示。

上图所示为材质编辑器,其与蓝图拥有同样的特性。这个屏幕的中心称为网格(grid)。我们可以将所有的定义蓝图多级的对象放置到网格上,该网格的标签名为material,术语称为节点。在之前的截图中,有一系列的输入引脚,这样其他的材质节点可以添加到上面,也因此可以定义它的属性。图1.7 TargetRed材质

为了将颜色赋给材质,我们需要创建一个节点。该节点将为节点中基础颜色(Base Color)输入给出颜色的信息。在节点附近的空区域单击鼠标右键,将出现一个菜单,它包含搜索框和一个可扩展的选择列表。这个展示了所有的我们可用添加到这个材质蓝图的可用蓝图节点选项。搜索框对文本很敏感,我们键入搜索对象的前几个字符就能看到一系列的搜索结果,在这里我们搜索的是VectorParameter,如图1.8所示。图1.8 搜索VectorParameter

材质编辑器(Material Editor)中的VectorParameter用于定义颜色,我们可以将它添加到材质编辑器的基础颜色输入节点。首先需要给VectorParameter节点选择一个颜色,双击Color节点的黑色区域,打开颜色选择器(Color Picker)。当目标被选择时,我们希望它显示亮红色,在色盘中手动选择颜色,如图1.9所示,选择完毕后单击好按钮,稍后你将发现原来VectorParameter节点的中间黑色的部分已经变成了红色。图1.9 颜色选择器

为了帮助我们记忆在材质中VectorParameter会哪些参数或属性,我们需要将Vector Parameter重命名为Color。当选中节点时,该节点会被金色的边框包围,查看细节面板(Details)里的内容,在通用 >Parameter处键入“Color”。这时VectorParameter节点名称自动地由None改为Color。

最后一步,连接Color VectorParameter节点与基础颜色节点。在蓝图中,可以通过单击和拖曳输出引脚至输入引脚将节点连接起来。输入引脚在节点的左侧,输出引脚在节点右侧。连接两个节点的细线称之为引线(Wire)。从Color输出引脚拖出一根引线至材质节点的基础颜色输入引脚,如图1.10所示。图1.10 连接Color节点与TargetRed节点1.3.3 为材质添加属性

我们可以通过材质节点的其他输入引脚,给材质添加一些光泽。如果使用单一颜色、平整的材质,3D物体看起来就会很不真实,可以在金属(Metallic)和粗糙度(Roughness)引脚设置值来改善这一情况。在空的网格区域单击鼠标右键,在搜索框中键入“scalar”,找到ScalarParameter节点,如图1.11所示。图1.11 搜索ScalarParameter节点

找到ScarlarParameter并选择,转到细节面板(Details),由于任何叠加性的影响对材质都很微妙,设置Default Value为0.1。将节点重命名为Metallic。最后,拖出引线连接Metallic的输出引脚和材质的金属输入引脚。

还需要连接粗糙度参数,在刚才创建的Metallic节点上单击鼠标右键,选择Duplicate。这个操作将生成Metallic节点的复制,唯一不同的时它没有引线与材质连接。选中这个复制节点,然后在细节面板中重命名为Roughness。保持Roughness节点中的Default Value值为0.1不变,拖出引线连接Roughness的输出引脚和材质的粗糙度输入引脚。如图1.12所示。图1.12 连接金属和粗糙度后的材质

至此,我们已经创建了一个亮红色的材质,当目标被选择时就会用它来突出显示。单击编辑器左上角的“保存”按钮保存资源,然后关闭材质编辑器返回关卡。1.4 创建第一个蓝图

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

在这个项目中, 我们把所有的蓝图存放在FirstPersonBP文件夹的子文件夹Blueprints下,因为这个蓝图是为CylinderTarget actor创建的,所以文件名为默认的Cylinder- Target_Blueprint即可,如图1.13所示。图1.13 创建蓝图

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

事件图表(见图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]键把它们都删除。图1.15 默认的事件图表1.4.2 检测事件Hit

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

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

从执行引脚拖出一根引线至节点右端的空白区域,将自动出现一个搜索窗口,允许我们创建一个节点并将它与执行引脚相连。确认搜索框内勾选了情境关联(Context Sensitive)。这样将搜索结果限制在能够被添加的节点中。在搜索框内键入“set material”,选取Set Material(StaticMeshComponent)节点。 小贴士 如果在勾选了情境关联的情况下搜索不到想查找的节点,可尝试去勾选重新搜索。即使这个节点在情境关联搜索时查找不到,它仍有可能可以添加到蓝图逻辑当中。

事件Hit节点中的动作(action)如图1.17所示。图1.17 添加Set Material(StaticMeshComponent)节点1.4.3 转换材质

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

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

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

既然我们已经设置了一个基础的游戏交互,运行测试一下,确保结果是否达到预期。关闭蓝图编辑器,在UE编辑器中单击播放按钮运行游戏,尝试跑动和射击,与我们之前创建的CylinderTarget actor发生碰撞,如图1.19所示。图1.19 目标圆柱体改变颜色1.4.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击中与转换节点引用的对象相匹配的圆柱体时,才将动作附加到节点的执行引脚。图1.20 搜索projectile

当节点出现时,可以看到在事件Hit的Other输出引脚和转换节点的Object引脚之间有一根蓝色的线相连(如果没有自动连接,可以手动连上)。连接FirstPersonProjectile节点的输出执行引脚和Set Material节点的输入执行引脚,如图1.21所示。图1.21 连接相关引脚

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

既然我们有目标来响应玩家的射击,则可以添加一些挑战性的东西来让项目像一个游戏,一个简单的方法是为目标制作移动的标靶。为了完成这个功能,首先我们需要将目标actor是设为可移动的,然后需要通过蓝图设置逻辑。这样便可以控制目标移动。我们的目标是使目标圆柱体在关卡中来回移动。1.5.1 改变actor的移动性和碰撞

为了让目标移动,首先需要改变actor的移动性(Mobility)为可移动(Moveable)。这个操作将允许对象在玩游戏时可以被操纵。在UE4编辑器的世界大纲视图中,选中CylinderTarget_Blueprint,查看细节(Details)面板。在变换数值(Transform values)的下方,可以看到可移动的开关,单击将状态由静态(Static)转变到可移动,如图1.22所示。图1.22 设置可移动属性 批注 默认情况下, 放置在世界中/场景中的actor为静态(Static)。“静态”表示这个对象在游戏运行时不能移动或被操作。静态对象着重对少量的关键资源进行渲染,应该将其作为非交互对象的默认选择,以便最大化帧率。

注意:关卡中目标圆柱体的版本仅仅是我们为目标圆柱体创建的蓝图模板的一个实例。这个实例是指一个已经被创建的真正的对象,而蓝图是各种特征的描述,一旦使用蓝图创建了实例,该实例也会拥有这些特征。

在关卡中我们做的改变仅仅是针对目标圆柱体的,为了对其他目标也做一些改变,就需要直接修改蓝图了。为此,打开CylinderTarget_Blueprint。

随着蓝图的打开,我们希望查找工具栏下方的视口标签。在左侧,可看到组件(Components)面板列出了组成这个蓝图的所有组件。由于我们想编辑物理对象、网格的属性,所以单击组件StaticMeshComponent(继承)。在蓝图编辑器的右边会看到细节面板与UE4关卡编辑界面中的细节面板有着相同的属性和分类。在这里,我们同样地将变换(Transform)下方的移动性开关设为可移动。这个操作将确保由这个蓝图创建的目标是设置为可移动的。

因为我们希望子弹能够将对象作为射击目标,所以需要确保目标能够发生碰撞,以至于子弹不会穿过目标。仍然是在细节面板中操作,找到Collision分类,然后在下拉菜单中找到碰撞预设值(Collision Presets)。在这个菜单中会有很多的选项。选择Custom时,用户可以将对象与不同对象之间的碰撞交互进行个性化设置。为了达到项目预期,我们仅需要选择BlockAllDynamic。这样网格会记录它与其他拥有碰撞器的对象之间发生的碰撞。如图1.23所示。图1.23 设置StaticMeshComponent1.5.2 目标分析

既然我们将目标设置为可移动的,接下来需要让蓝图控制目标圆柱体如何移动。为了移动一个对象,需要3个三方面的数据。● 圆柱体的当前位置。● 应该在什么方向移动。● 它应该达到的移动速度。

为了理解对象现在的位置,我们需要知道更多的信息,特别需要留意圆柱体在世界中的坐标。需要将速度和方向的值提供给蓝图,通过一些必要的计算将这些值算出来,为蓝图移动对象提供有用的信息。1.5.3 使用变量存储数据

第一步就是创建两个变量:方向(direction)和速度(speed)。找到我的蓝图(My Blueprint)面板,你会看到一个叫作变量(Variables)的分类,这个分类里暂时没有其他数据,可单击这个分类右边的加号(+)来创建变量。

创建变量后,单击该变量,在蓝图编辑器右边的细节面板中,用户将看到一系列的区域可以用于编辑这个变量,我们需要编辑其中的4个:变量名称(Variable Name)、变量类型(Variable Type)、可编辑(Editable)和默认值(Default Value)。我们希望第一个变量用于控制移动速度,因此重命名该变量名为Speed。对于变量类型,我们希望这个变量能够用于存储期望的速度数值,因此在下拉列表中选择浮点型(Float)。

勾选可编辑使得能够在此蓝图之外编辑该变量。这样在测试游戏的时候能够很方便快速地调整变量的数值。默认值分类看起来没有可编辑区域,但是有一条提示信息请编译此蓝图(compile the Blueprint),编译蓝图之后,出现一个可以输入初始值的区域,将默认的值0.0改为200.0,如图1.24所示。图1.24 设置变量Speed

通过同样的步骤,创建Direction变量,变量类型选择Vector。Vector包含X、Y、Z坐标轴的信息。在这个情况下,我们需要指明对象移动的方向。设置Direction变量为可编辑,并且将默认值设为(0.0,-10.0,0.0)。1.5.4 准备计算方向

为了得到需要为移动所提供的信息,现在将继续探索。或许最初的时候看起来有些难,但是通过分解每个功能并将各个节点组合起来,就可以完成最终的目标。

我们需要完成的第一个计算工作就是取出direction变量的向量并进行归一化(normalize)。归一化是向量运算中的一个常见步骤,可将向量的长度转换为一个单位长度,可与其余部分的计算兼容。有一个专门的蓝图节点来完成此操作。

选中我的蓝图(My Blueprint)面板上的Direction变量,将它拖曳至事件图表(Event Graph)中的空白区域。这个操作将生成一个小的节点,提示用户选择获得(Get)或者设置(Set)。我们想取出direction的值,所以选择获得来创建这个节点来存储变量的值。单击Direction节点的输出引脚至事件图表的空白区域,在搜索框内键入“normalize”,在搜索结果中选择Vector分类下的Normalize节点,如图1.25所示(选中需要注释的两个节点后按[C]键添加注释)。图1.25 归一化方向向量

如果发现搜索不到节点,请将Vector数组改为Vector,如图1.26所示。 批注 在蓝图上留下注释是一个很好的习惯,注释能够帮助描述这一组蓝图完成什么样的功能。在编辑完这个蓝图后,过一阵子回过头来看的时候能够快速地知道它的功能。图1.26 单击修改Vector与Vector数组类型1.5.5 使用delta time关联速度与时间

为了让速度值与方向相关,首先需要将速度变量与delta time相乘。delta time是以秒计算,完成最后一帧的时间。它与游戏的帧速率不同。速度变量的值与delta time相乘后,可以确保游戏中的对象[4]的速度都是一致的,与游戏的帧速率无关。

将Speed变量拖入事件图表,选择“获得”来创建这个速度节点。在事件图表空白区域单击鼠标右键进行搜索,找到Get World Delta Seconds选项。最后从Speed节点或Get World Delta Seconds节点的

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载