- 学习目标:
- 创建由玩家控制具有基本动作的
Actor - 设置播放器输入
- 创建在玩家碰撞时消失的物体
- 创建由玩家控制具有基本动作的
- 摄像机是玩家观察世界的方法
- Pawn类是一种可以被”控制”的Actor,可以接收Controller的输入
- Spawing the Player:在玩家可以控制兵之前,需要指定两件事
- 玩家将控制的兵类
- 兵将在哪里产生
**Acotr**:当我们启动编辑器时,凡是在关卡中能看到的,都是继承自**Acotr**,Actor集成了一些主要的功能:网络同步/按键响应/角色移动/角色缩放等等功能.**Pawn**:**Acotr**的一种类型,用于表现一个可供控制的游戏类型。**Pawn**通常都是被玩家或者AI通过**Controlller**控制并移动1.创建游戏模式
玩家将控制的兵类
- 游戏模式是一个控制玩家如何进入游戏的类。可以通过使用游戏模式来确定每个玩家的产卵点,也决定了玩家将使用的哪个Pawn
- 在蓝图编辑器中,
**Classes**->**Default Pawn Class**指定默认类 - 在使用新游戏模式时,
**level**需要知道使用哪个游戏模式,在**World Settings**->**Game Modee**->**GameMode Override**中进行选择。**Selected GameMode**中的类都将更改为该游戏模式中选择的类
兵将在哪里产生
- 可以通过在
**level**中放置一个**Player**开始完成 Modes->**Player Start**
2.设定输入
1.基础概念
- 密钥绑定:为操作分配键。虚幻引擎提供了两种创建密钥绑定的方法
**操作映射**:这些只能处于两种状态:按下或未按下。只有在按下或松开键后,操作事件才会触发。用于没有中间状态的操作,如:开枪**轴映射**:它们输出一个称为轴值的数值(??)。安讯士事件将触发每一帧。通常用于需要操纵杆或鼠标的操作。- 要查看输入设置,请转到
**编辑\项目设置**。在左侧,选择**引擎**部分下的**输入**,在**绑定**部分进入,您可以在其中设置输入。 -
2.创建运动映射
**映射组**允许将多个键绑定到一个事件。
-
3.轴值和输入刻度
**轴值**:是由输入类型及其使用方式确定的数值。按下按钮和按键时输出1,操纵杆输出的值介于 -1和1 之间,具体取决于方向和推力的距离。- 也可以使用轴值来控制
**Pawn**的速度。通过将轴值乘以速度变量来通过操纵杆调整速度。 - 还可以使用轴值指定沿轴的方向。如果将
Pawn的速度乘以正轴值将获得正偏移,使用负轴值将导致负偏移。将此偏移量添加到**Pawn**的位置将决定它向哪个方向移动。 **缩放**:由于键盘键只能输出轴值1或0,因此可以使用**缩放**将其**比例**转换为负数。原理:取轴值并将其乘以刻度
3.移动播放器
1.使用变量
在移动时,需要指定Pawn的移动速度。指定速度的一种简单方法就是将其存储在**变量**中。
**我的蓝图**->**变量**->**细节**
- 创建变量并命名为
MaxSpeed,到细节选项卡将变量类型更改为Float/浮点型,并在工具栏中进行编译 将
**MaxSpeed**与**轴值**相乘,创建并选择**float * float**节点进行连接完成该操作。2.获取玩家方向
**获取Actor向前向量**:通过此节点获取Pawn面对的位置以确定玩家前进方向。
**添加移动输入**:此节点将沿方向和值取值,将其转换为存储的偏移量。

- 白线表示执行链:当玩家移动输入轴时,将生成一个事件,该事件将执行
**InputAxis MoveForward**节点,随后执行**Add Movement Input**节点 **Add Movement Input**节点采用以下输入:要实际移动
Pawn,需要通过添加Add Movement Input计算偏移量,并将其添加到Pawn的位置- 玩家在游戏中的每一帧移动少量,将移动添加到
**Event Tick/事件Tick**,该事件每帧生成一次。
- 玩家在游戏中的每一帧移动少量,将移动添加到
**Consume Movement Input Vector/消耗移动输入向量**:获取偏移量**AddActor LocalOffset/添加Actor本地偏移**:将偏移量添加到**Actor**
缺点:
**Event Tick**每帧调用一次,而高端机器渲染帧的速度更快,因此移动节点将更频繁的执行,导致Pawn在高端机器上移动速度更快,反之亦然。要解决这一点,需要移动和帧率无关。4.帧率独立性
帧率独立性:无论帧率如何,一切运动将具有相同的运动结果。
增量秒:自上次事件计时以来经过的时间量。通过**Consume Movement Input Vector**获得的偏移量 ,再使用 偏移量 * 增量秒 ,移动将于帧率无关**偏移量 * 增量秒**:添加**Vector * Float**节点,完成链接。
- 完成帧率独立性。
4.Acotr碰撞
Actor需要其可碰撞的空间才能实现碰撞效果
- 碰撞网格:导入网格时自动生成(需启用)。也可以使用3D软件创建自定义碰撞网格
碰撞组件:它们有三种形状:盒子,胶囊和球体。在
**组件**面板添加,通常用于简单的碰撞。1.启用冲突
当移动
Actor时,虚幻引擎只会考虑碰撞的根组件,由于**Pawn**的根组件没有任何冲突,因此它会通过所有内容。要使用碰撞网格体,
**StaticMesh**需要的是根,将**StaticMesh**设为根目录后,在**事件图表**中的**AddActor LocalOffest**节点,勾选**Sweep**将其设为True。编译以完成冲突。2.创建项目
通常来说,物品是玩家可以收集的任何东西。
若要检测多维数据集何时触及该项,需要一个事件节点,该事件节点在发生碰撞时触发。可以使用
**碰撞响应**来生成这样的事件**碰撞响应**有三种类型:忽略、重叠和阻塞 | Actor A | Actor B | Result | | —- | —- | —- | | Ignore(忽略) | Any response | Actors将互相穿行,不会触发任何事件 | | Overlap(重叠) | Overlap or Block | Actors将互相穿行,该重叠事件由两个参与者触发 | | Block(阻塞) | Block | Actors将互相阻挡,该hit事件由两个参与者触发 |
3.设置碰撞响应
选择物体->StaticMesh->细节->Collision,在**碰撞**部分中,设置**碰撞响应****Conllision**->**Collision Presets**-**coustom/自定义**来指定项和多维数据集之间的**碰撞响应**- 由于多维数据集的类型为
**WorldDynamic**,因此将该类型的**碰撞响应**更改为**Overlap**
4.处理碰撞
- 在处理
碰撞时,需要使用Overlap事件。在StaticMesh->Add Event->**OnComponentBeginOverlap/添加事件**,该操作会将onComponentBeginOverlap(StaticMesh)节点添加到事件图表中。 - 创建
**DestroyActor**节点,并将其链接到**OnComponentBeginOverlap(StaticMesh)**节点,此节点将在游戏中移除**目标Actor**,但是由于没有目标,因此该节点将摧调用它的**Actor**。


