虚幻引擎 5 初学者教程——蓝图入门

链接:https://pan.baidu.com/s/1BW469zltOiB4Y8mj9i6EMw?pwd=yfh6
提取码:yfh6

在此虚幻引擎 5 蓝图教程中,您将学习如何使用蓝图创建玩家角色、设置输入以及让物品在玩家触摸时消失。


从版本 4 开始,虚幻引擎编辑器除了传统的 C++ 支持外,还配备了蓝图可视化脚本系统。该系统的主要目的是提供比优秀的 C++ 更友好的编程接口,允许快速创建原型,甚至允许设计人员自定义游戏元素行为。

Blueprint 脚本系统的主要功能是能够通过创建表示函数的框以及单击和拖动连线来创建行为并定义逻辑的工作方式来创建代码。


在本教程中,您将使用蓝图来:

设置一个自上而下的相机。
创建一个具有基本动作的玩家控制的actor。
设置play输入。
创建一个当玩家触摸它时消失的项目。

注意:本教程假定您知道如何在虚幻引擎 5 界面中导航。
如果您熟悉组件和节点等基本蓝图概念,这将有所帮助。
如果您需要复习
请点击这里

  • 入门

通过单击本教程顶部的下载链接按钮下载启动项目并解压缩。
要打开该项目,请转到起始项目文件夹并打开BananaCollector.uproject

注意:如果您收到一条消息说该项目是使用早期版本的虚幻编辑器创建的,只要它仍然是虚幻引擎 5 版本(引擎经常更新)就可以。选择打开副本或就地转换。

你会看到下面的场景。玩家将在这里四处走动并收集物品。

您会发现项目文件组织在文件夹中:

All/Content/BananaCollector/Blueprints:包含教程的蓝图。
All/Content/BananaCollector/Maps:包含项目的层级。
All/Content/BananaCollector/Materials:包含游戏对象着色器。
All/Content/BananaCollector/Meshes:包含所有项目游戏对象的网格文件。
All/Content/BananaCollector/Textures:包含项目游戏对象的纹理。

使用上面以红色突出显示的按钮将内容浏览器固定在编辑器窗口中。如果该按钮没有出现,则内容抽屉已经修复。

  • 创建播放器

在 Content Drawer 中,导航到Blueprints文件夹。单击添加按钮并选择蓝图类

演员必须能够接收来自玩家的输入,因此从弹出窗口中选择Pawn类并将其命名为BP_Player

注意:Character类也可以。它甚至默认包含一个运动组件。
但是,您将实现自己的移动系统,因此Pawn类就足够了。
要了解有关Character和Pawn之间差异的更多信息,
请点击这里阅读官方文档

  • 添加相机

相机是玩家观察世界的方法。您将创建一个俯视玩家的相机。

在内容浏览器中,双击BP_Player以在蓝图编辑器中将其打开。

要创建相机,请转到“组件”面板。单击添加组件并选择相机

要使相机处于自上而下的视图,您必须将其放置在玩家上方。选择相机组件后,转到“视口”选项卡。

W键激活移动操纵器,然后将其移动到(-1100, 0, 2000)。或者,将坐标键入位置字段。它们位于“详细信息”面板的“转换”部分下

如果您看不到相机,请按F键聚焦它。

接下来,按E键激活旋转操纵器。在Y 轴上将相机向下旋转至-60度

最终的相机属性应如下所示。

Representing the Player

红色立方体将代表Player,因此您需要使用静态网格体组件来显示它。

首先,通过左键单击“组件”面板中的空白区域来取消选择“相机”组件。如果不这样做,下一个添加的组件将是 Camera 组件的子组件。

单击添加并选择静态网格体

要显示红色立方体,请选择Static Mesh组件,然后转到Details 选项卡。单击静态网格体右侧的下拉菜单并选择SM_Cube

这是你应该看到的(如果你没有看到它,请在视口中按入F以聚焦它):

现在,是时候生成玩家 Pawn 了。单击编译并返回到主编辑器。


  • 实施播放器

在玩家可以控制 Pawn 之前,您需要指定两件事:

玩家将控制的 Pawn 类

Pawn 生成的位置

您通过创建一个新的游戏模式类来完成第一个步骤。


创建游戏模式

游戏模式是控制玩家如何进入游戏的类。

例如,在多人游戏中,您可以使用游戏模式来确定每个玩家的生成位置。

更重要的是,游戏模式决定了玩家将使用哪个 Pawn。

转到 Content Drawer 并确保您位于Blueprints文件夹中。

单击添加新按钮并选择蓝图类。

从弹出窗口中,选择Game Mode Base并将其命名为GM_Tutorial

现在,您需要指定默认的 Pawn 类。双击GM_Tutorial将其打开。

转到“详细信息”面板并查看“类”部分下的内容。单击Default Pawn Class下拉菜单并选择BP_Player

单击编译并关闭蓝图编辑器。

在使用新的游戏模式之前,关卡需要知道要使用哪种游戏模式。

World Settings中指定。


  • 世界设定

每个级别都有其设置。通过选择菜单Window ▸ World Settings访问设置。

或者,转到工具栏并选择设置 ▸ 世界设置

一个新的世界设置选项卡将在详细信息选项卡旁边打开。

从这里,单击GameMode Override下拉菜单并选择GM_Tutorial

您现在会看到课程已更改为在GM_Tutorial中选择的课程。

最后,您需要指定玩家生成的位置。您可以通过在关卡中放置一个Player Start actor 来完成此操作。

放置 Player Start

在生成玩家时,游戏模式会寻找 Player Start actor。

如果游戏模式找到一个,它将尝试在那里生成玩家。

要放置 Player Start,请转至工具栏,单击Add New按钮,然后导航至Basic ▸ Player Start

左键单击并将Player Start从“模式”面板拖动到视口中。

释放左键单击将放置它。

把它放在任何你喜欢的地方。完成后,转到工具栏并单击“播放”。您将在放置 Player Start 的位置生成。

要退出游戏,请单击工具栏中的停止按钮或按Esc键。如果看不到光标,请按Shift+F1

如果你不能四处走动,这不是什么游戏,对吧?您的下一个任务是设置输入设置。


  • 设置输入

在设置播放器输入之前,最好先了解一下键绑定以及如何使用它们灵活而强大地创建播放器输入。

在 Unreal 中,您可以设置在您按下时触发事件的键绑定

事件是在某些操作发生时执行的节点(在本例中,当您按下绑定键时)。

当事件触发时,任何连接到事件的节点都将执行。

这种绑定键的方法很有用,因为它意味着您不必对键进行硬编码。

例如,您绑定左键单击并将其命名为 Shoot。

任何可以射击的演员都可以使用 Shoot 事件来了解玩家何时按下了左键单击。

如果要更改密钥,请在输入设置中进行更改。

如果您对其进行了硬编码,则必须遍历每个演员并单独更改键。

  • 轴值和输入比例

在 Unreal 中,输入是通过项目设置中确定的轴值读取的。

轴值是由输入类型及其使用方式确定的数值。按钮和按键在按下时输出 1。

Thumbsticks 输出一个介于 -1 和 1 之间的值,具体取决于方向和你推动它的距离。

使用轴值来控制 Pawn 的速度。

例如,如果将摇杆推到边缘,轴值将为 1。

如果将其推到一半,则轴值为 0.5。

通过将轴值乘以速度变量来使用拇指杆调整速度。

您还可以使用轴值指定沿轴的方向。

如果将 Pawn 的速度乘以正轴值,则会得到正偏移量。

使用负轴值将导致负偏移。

将此偏移量添加到 Pawn 的位置决定了它的方向。

因为键盘按键只能输出1或0的轴值,所以可以使用scale将其转换为负值。

它的工作原理是获取轴值并将其乘以比例。

如果将正数(轴值)乘以负数(刻度),则会得到负数。

现在,开始为这个项目创建映射。


  • 轴和动作映射

要查看输入设置,请转到编辑 ▸ 项目设置。

或者单击编辑器窗口左上角的设置按钮。

在左侧,选择“引擎”部分下的“输入”。

Bindings部分允许您设置输入。


Unreal 提供了两种创建键绑定的方法:

动作映射:这些只能处于两种状态:按下或未按下。

动作事件只会在您按下或释放按键时触发。

将其用于没有中间状态的动作,例如开枪。

轴映射:这些输出一个称为轴值的数值(稍后会详细介绍)。

轴事件将在每一帧触发。您通常将其用于需要摇杆或鼠标的操作。

对于本教程,您将使用轴映射。


  • 创建运动映射

首先,您将创建两个轴映射组

组允许您将多个键绑定到一个事件。

要创建新的轴映射组,请单击Axis Mappings右侧的+号

创建两个组并将它们命名为MoveForward和MoveRight

MoveForward将处理向前和向后移动。MoveRight将处理左右移动。

您会将移动映射到四个键:W、A、S和D

目前,只有两个插槽可以映射键。

通过单击组名称字段旁边的+号向每个组添加另一个轴映射

要映射键,请单击下拉菜单以显示键列表。

将W和S键映射到MoveForward。

将A和D键映射到MoveRight

通过单击Scale字段并输入-1来设置S和A键的比例。

接下来是有趣的部分:让 Pawn 移动!关闭项目设置,然后在蓝图编辑器中双击打开BP_Player 。


  • 移动Player

首先,您需要获取运动映射的事件。

在 BP_Player 蓝图中,单击窗口顶部的Event Graph选项卡。

右键单击事件图表中的空白区域以获取节点列表。

从菜单中搜索MoveForward。添加Axis Events下列出的MoveForward节点。

MoveRight重复该过程。

现在,您将为MoveForward设置节点。


  • 使用变量

要移动,您需要指定 Pawn 移动的速度。

指定速度的一种简单方法是将其存储在变量中。

要创建一个,请转到“我的蓝图”选项卡并单击“变量”部分右侧的+号。

创建新变量后,Unreal 允许您为其命名。

将其设置为MaxSpeed。然后,在Details选项卡中,将变量类型更改为Float

通过单击“变量类型”旁边的下拉菜单并选择“浮点”来执行此操作。

接下来,您需要设置默认值。

但是,在设置它之前,您必须单击工具栏中的编译以将默认值字段的类型与新选择的 Float 变量类型同步。

在您的变量仍处于选中状态的情况下,返回到“详细信息”选项卡。

转到Default Value部分并将MaxSpeed的默认值更改为10。

接下来,将MaxSpeed变量从 My Blueprint 选项卡拖动到 Event Graph 中

从菜单中选择获取

您现在将MaxSpeed轴值相乘以确定最终速度和方向。

添加一个float * float节点并将Axis Value和MaxSpeed连接到它。

  • 获取玩家方向

要前进,您需要知道 Pawn 面向的位置。

幸运的是,Unreal 有一个用于此目的的节点。

添加一个Get Actor Forward Vector节点。

接下来,添加一个Add Movement Input节点。该节点将采用方向和值并将其转换为存储的偏移量。像这样连接节点:

白线代表一个执行链。

换句话说,当玩家移动输入轴时,将生成一个事件来执行InputAxis MoveForward节点。

白线表示一旦发生这种情况,您将执行Add Movement Input节点。


添加运动输入节点采用以下输入:

Target:设置为自己,在本例中是玩家(红色立方体)。

World Direction:移动目标的方向,在本例中是玩家面对的方向。

Scale Value:移动玩家的距离,在本例中是最大速度 * 轴值(请记住,它是一个在 -1 到 1 范围内的值)。

MoveRight重复该过程,但将Get Actor Forward Vector替换为Get Actor Right Vector。

看看您可以在不查看上述说明的情况下做多少事情!


  • 添加偏移量

要移动 Pawn,您需要获取通过 Add Movement Input 计算的偏移量并将其添加到 Pawn 的位置。

您的策略是让玩家在游戏的每一帧移动少量,因此您需要将移动添加到每帧生成的Event Tick事件中。

导航到事件图表中的Event Tick节点。它应该在左侧变灰,但如果没有,请创建一个。

要获取偏移量,请创建一个Consume Movement Input Vector节点。

要添加偏移量,请创建一个AddActorLocalOffset节点。之后,像这样链接它们:

这意味着对于游戏的每一帧,您将获得任何存储的移动输入并将其添加到actor的当前位置。

单击Compile并返回主编辑器并单击Play

你现在可以四处走动了!如果您发现按键没有反应,请确保光标位于游戏窗口内并单击以选中它。

有一个小问题:高端机器可以更快地渲染帧。

因为 Event Tick 每帧都会被调用,所以运动节点会更频繁地执行。

这导致 Pawn 在高端机器上移动得更快,反之亦然。

要解决此问题,您的移动需要与帧速率无关


  • 帧率独立性

帧率独立性意味着无论帧率如何,一切都会有相同的结果。

值得庆幸的是,在 Unreal 中实现帧速率独立性很容易。

退出游戏并打开BP_Player

接下来,导航到您的Event Tick节点并查看Delta Seconds

Delta Seconds 是自上次 Event Tick 以来经过的时间量。

通过将您的偏移量乘以 Delta Seconds,您可以使您的运动帧速率独立。

例如,您的 Pawn 的最大速度为 100。如果自上次 Event Tick 后经过一秒,您的 Pawn 将移动整整 100 个单位。

如果半秒过去了,它将移动 50 个单位。

如果移动取决于帧速率,则 Pawn 将每帧移动 100 个单位,而不管帧之间的时间间隔。

要将您的偏移量与 Delta Seconds相乘,请通过右键单击并在对话框中搜索*添加一个乘法节点

如下图所示。

请注意,连接器最初是灰色的,因为 UE5 不知道您要乘以什么,并且在您分配值时,连接器采用输入数据的颜色。

最终结果应如下所示:

由于帧之间的时间(Delta Seconds)非常小,您的 Pawn 移动速度会慢得多。

通过将MaxSpeed的默认值更改为600来解决此问题。

恭喜,您已经实现了帧速率独立性!


您可能已经注意到立方体穿过所有东西。

要解决这个问题,您需要了解collisions

戴上你的安全头盔,因为你即将与一些理论发生正面碰撞!


  • Actor碰撞

当您想到碰撞时,您可能会想到汽车相互碰撞。

幸运的是,Unreal 中的碰撞要安全得多。

要发生碰撞,actor 需要表示其可碰撞空间(通常称为碰撞)。使用以下之一:

碰撞网格:这些是在导入网格时自动生成的(如果启用它)。
用户还可以使用 3D 软件创建自定义碰撞网格。红色立方体已经有一个自动生成的碰撞网格。

碰撞组件:它们有三种形状:盒子、胶囊和球体。
通过“组件”面板添加它们。一般用于简单的碰撞。

下面是角色及其碰撞的示例。

当一个 actor 的碰撞触及另一个 actor 的碰撞时,就会发生碰撞。

现在,是时候启用碰撞了。


  • 启用碰撞

您可能想知道为什么立方体没有碰撞,即使它有碰撞网格。

当您移动一个 actor 时,Unreal 只考虑碰撞的根组件

因为您的 Pawn 的根组件没有碰撞,所以它会穿过所有东西。

注意:没有碰撞作为根的 actor 仍然可以阻挡其他 actor。但是如果你移动*actor,它不会与任何东西发生碰撞。*

因此,要使用碰撞网格,StaticMesh需要成为root。

为此,请转到“组件”面板。

接下来,左键单击并将StaticMesh拖动 到DefaultSceneRoot。

释放左键单击以使StaticMesh成为新的根。

在碰撞起作用之前还有一件事要做。

切换到 Event Graph 并转到AddActorLocalOffset节点。

找到扫描输入并通过左键单击复选框将其设置为

基本上,AddActorLocalOffset将actor传送到新位置。

Sweep确保 actor 与旧位置和新位置之间的任何东西发生碰撞。

转到主编辑器并单击Play。立方体现在将与关卡发生碰撞!

您要做的最后一件事是创建一个当玩家触摸它时让物品消失


  • 创建项目

通常,物品是玩家可以收集的任何东西。

您将使用BP_Banana作为项目。

要检测立方体何时接触到物品,您需要一个在发生碰撞时触发的事件节点。

使用碰撞响应来生成此类事件。

碰撞响应还决定了一个 actor 在与另一个 actor 发生碰撞时的反应。

共有三种类型的碰撞响应:Ignore、Overlap和Block

以下是它们如何相互作用:

尽管您可以使用 Overlap 或 Block,但本教程只会向您展示如何在项目上使用 Overlap。


  • 设置碰撞响应

退出游戏并打开BP_Banana

选择StaticMesh组件,然后转到 Details 面板。

碰撞部分是您设置碰撞响应的地方。

如果单击箭头展开菜单,您会看到大多数设置都显示为灰色。

要使它们可编辑,请左键单击Collision Presets旁边的下拉菜单。

从列表中选择自定义

您需要指定项目和立方体之间的碰撞响应。

组件有一个称为对象类型的属性。

对象类型只是对相似参与者进行分组的一种便捷方式。

在此处阅读有关对象类型的更多信息。

因为立方体的类型是WorldDynamic,所以您想将碰撞响应更改为该类型。

Collision Responses部分下,将WorldDynamic的碰撞响应更改为Overlap

通过左键单击WorldDynamic右侧的中间复选框来执行此操作。

  • 处理碰撞

要处理碰撞,您需要使用重叠事件

转到 Components 面板并右键单击StaticMesh

从上下文菜单中,选择添加事件 ▸ 添加 OnComponentBeginOverlap。

这会将OnComponentBeginOverlap (StaticMesh)节点添加到您的事件图表中。

最后,创建一个DestroyActor节点并将其链接到OnComponentBeginOverlap (StaticMesh)节点

顾名思义,它将目标actor从游戏中移除。

然而,因为没有目标,它会破坏调用它的actor。


  • 放置物品

关闭蓝图编辑器并确保您位于蓝图文件夹中。

通过左键单击并将BP_Banana拖到 视口中,开始将香蕉放入关卡中。

点击Play开始收集香蕉!


  • 写在最后

您可以通过单击教程顶部下载链接来下载已完成的项目文件。

您现在离成为虚幻引擎专家又近了一步。希望本教程没有让您发疯。