且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《Unreal Engine 4蓝图可视化编程》一2.2 制作瞄准镜效果

更新时间:2022-09-18 12:16:55

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

2.2 制作瞄准镜效果

现代FPS的核心元素就是以瞄准镜的形式将FOV(field of view,视野)呈献给玩家。这是一个很重要的因素,给游戏带来了精确感和控制感。现在将这一功能的简化版添加到项目中。

在事件图表中靠近Mouse input节点组的空白区域单击鼠标右键,搜索输入动作Zoom(InputAction Zoom)触发器节点并添加。我们希望修改FirstPerson- Camera组件中的FOV值,于是到组件面板中找到FirstPersonCamera并将它拖入事件图表中。

从FirstPersonCamera节点的输出引脚拖出引线,搜索Set Field Of View(变量)节点并选择。减小视野给我们一种效果:在屏幕的中间将一小块区域进行放大。由于我们默认的视野值是90,处理后的视野值在节点中设为45,如图2.8所示。


《Unreal Engine 4蓝图可视化编程》一2.2 制作瞄准镜效果

连接输入动作Zoom的Pressed输出执行引脚和设置节点的输入执行引脚。编译、保存,最小化蓝图后在UE4关卡编辑器中单击播放进行测试。你将注意到当你右键单击鼠标时,视野会缩小,看到的物体也感觉更近了。由于主摄像机中为角色剔除的对象会产生变形,所以接下来我们将优化这一行为。

2.2.1 使用时间轴进行平滑过渡

为了让视野平滑转换,我们需要创建一个将变化逐渐地显示出来的动画。为了实现这个效果,先回到事件图表中的FirstPersonCharacter蓝图。

按住[Alt]键并单击输入动作Zoom节点的Pressed输出执行引脚的连接,从Pressed引脚拖出引线,搜索并选择添加时间轴(Add Timeline)来添加一个时间轴(timeline)。时间轴允许我们在指定的时间内改变一个值(比如摄像机的视野)。

注意 批注 

组件末尾的(继承)标签告诉我们这个组件的功能在C++ 脚本中定义,而不是在蓝图中定义的。组件的功能直接在C++ 脚本中定义,这在进行移动或网格定义的物理计算等复杂工作的组件中很常见的。如果你对继承组件的代码感兴趣,你可以右键单击该组件打开“.h”头文件。

为了改变时间轴的值,双击时间轴节点,打开时间轴编辑器。在编辑器左上角你将看到4个按钮,每个按钮都能添加一个不同类型的并且将在时间轴过程中改变的值。因为视野被一个数值所表示,所以我们单击[f]按钮(添加浮点型轨迹(Add Float Track)),将添加一个时间轴,并且光标闪烁提示修改标签名,我们将它命名为Field of View。现在我们需要在不同的时间间隔上编辑数值,如图2.9所示。


《Unreal Engine 4蓝图可视化编程》一2.2 制作瞄准镜效果

为了完成上图所示的时间轴,我们需要按住[Shift]键并在(0,0)点附近单击(也可以在(0,0)点附近单击鼠标右键>>添加关键帧),你将看到在图表的左上角出现时间和数值区域。这允许我们根据数值精确地调整时间轴。确保时间设置为0.0,默认视野(FOV)的值为90,即(时间,值)为(0.0,90)。

我们希望放大的动画尽量快速完成,所以在时间轴编辑器的顶端,找到长度(Length)右边的输入框,将默认值修改为0.3。这个操作可以将动画限定在0.3秒内完成。现在按住[Shift]键并单击图表白色区域的末端,仔细地将Time区域设为0.3,值区域设为45(如果觉得手动调比较麻烦,可以在输入框内直接输入)。这时数值区域内所有的数值都自动地被转换为近似的浮点型数值,如图2.10所示。这些数值差并不能产生更多的视觉上的差异,所以我们并不需要太关心这个数值转换。


《Unreal Engine 4蓝图可视化编程》一2.2 制作瞄准镜效果


注意到时间线反映的值逐渐地从90减小到45,这意味着当这个动画被调用时,玩家的视野将会平滑地放大,而不是迅速地从90直接变为45。这样就利用时间轴来设置数值在一段时间内的改变。

现在转到事件图表,我们希望用时间轴来设置视野,如图2.11所示连接蓝图。


《Unreal Engine 4蓝图可视化编程》一2.2 制作瞄准镜效果


从时间轴_0节点的Field of View输出引脚拖出引线至设置(Set)节点的输入引脚。这样将重写之前写死的值45。然后,将时间轴节点的Update输出执行引脚与设置节点的输入执行引脚相连。这个操作将使得视野值(FOV value)通过传递新的值给执行函数来随时更新。由于在时间轴里已经设置过了,视野的值在这里就不需要设置了,时间轴使得视野值从90到45在0.3秒内逐渐变化。

注意 批注 

UE4中有两种基本的方法实现动画。时间轴非常适合于简单的改变数值,比如门绕着轴旋转,对于更复杂的、基于角色的或者是电影般的动画,可以使用引擎内建的动画系统。Matinee(关键帧)和复杂的动画超出了本书的范围,但是有很多专用的学习资源是使用matinee的。建议从Unreal wiki相关的教程开始,参见wiki网站的相关介绍。

最后,我们希望当鼠标右键松开时,取消放大视野。为了实现这个效果,从输入动作Zoom节点的Released引脚出出引线连接至时间轴节点的Reverse引脚。这个操作将使得松开鼠标右键时,原来拉近视野的动画倒着播放(即拉远视野),保证在还原到原来视野时有一个平滑的切换动画。同样地,选中完成该功能的所有节点,为节点组添加注释,可方便后续查阅时能够快速了解这个节点组完成的功能。

现在请编译、保存蓝图,最小化蓝图编辑器后,在UE4编辑器中按下播放按钮进行测试,当你按下和松开鼠标右键时,视野是否能相应地拉近和拉远。

2.2.2 加快子弹的速度

我们已经给玩家角色增加了新的玩法,现在需要将关注点回到游戏的射击机制上。从刚才测试的情况来看,从枪口射出的子弹(小球)在空中的运动轨迹是一条速度相对较慢的弧线,我们希望适当加快子弹的速度让它看起来更像。

为了更改子弹的属性,我们需要打开同样位于Blueprints文件夹中的蓝图FirstPersonProjectile。打开蓝图后,找到组件面板里的并选择Projectile。这是一个控制子弹移动组件,其已经被添加到球体网格和碰撞器,用于定义当子弹在游戏世界中被创建后怎样运动。

在细节面板中,Projectile具有一系列的属性值。这些值与移动相关并可以被修改,我们将修改其中部分属性值,如图2.12所示。


《Unreal Engine 4蓝图可视化编程》一2.2 制作瞄准镜效果

首先,找到Initial Speed和Max Speed属性,默认值为3000。Initial Speed定义了当子弹被创建时的飞行速度。Max Speed定义了在子弹创建之后给子弹施加力,子弹能够达到的最大速度。如果我们有一个火箭,或许会期望在火箭发射后给它施加一个加速度来表示推进器工作。然而,由于我们正在表示从枪口射出的子弹,将初设速度设置的最快更有意义,因此将Initial Speed和Max Speed都设为之前速度的两倍,即6000。

此外,你或许注意到当子弹碰到墙和其他物体时会反弹,就像碰到了一堵橡皮墙一样。然而我们要模仿一个更硬、更强力的冲击弹丸。为了移除反弹属性,在细节面板中找到Projectile Bounces分类,将Should Bounce取消勾选。其他的选项只有在Should Bounce勾选时才起作用,所以不需要去调整它们。

现在请编译、保存蓝图,最小化蓝图编辑器后,在UE4编辑器中按下播放按钮进行测试,你将发现枪口射出的子弹打得更远、更有力度。