• 学习目标:
    • 创建由玩家控制具有基本动作的Actor
    • 设置播放器输入
    • 创建在玩家碰撞时消失的物体

  1. 摄像机是玩家观察世界的方法
  2. Pawn类是一种可以被”控制”的Actor,可以接收Controller的输入
  3. Spawing the Player:在玩家可以控制兵之前,需要指定两件事
    1. 玩家将控制的兵类
    2. 兵将在哪里产生
  • **Acotr**:当我们启动编辑器时,凡是在关卡中能看到的,都是继承自**Acotr**,Actor集成了一些主要的功能:网络同步/按键响应/角色移动/角色缩放等等功能.
  • **Pawn**:**Acotr**的一种类型,用于表现一个可供控制的游戏类型。**Pawn**通常都是被玩家或者AI通过**Controlller**控制并移动

    1.创建游戏模式

    玩家将控制的兵类

  1. 游戏模式是一个控制玩家如何进入游戏的类。可以通过使用游戏模式来确定每个玩家的产卵点,也决定了玩家将使用的哪个Pawn
  2. 在蓝图编辑器中,**Classes**->**Default Pawn Class**指定默认类
  3. 在使用新游戏模式时,**level**需要知道使用哪个游戏模式,在**World Settings**->**Game Modee** -> **GameMode Override**中进行选择。**Selected GameMode**中的类都将更改为该游戏模式中选择的类
    1. image.png

兵将在哪里产生

  • 可以通过在**level**中放置一个**Player**开始完成
  • Modes->**Player Start**

2.设定输入

1.基础概念

  • 密钥绑定:为操作分配键。虚幻引擎提供了两种创建密钥绑定的方法
  • **操作映射**:这些只能处于两种状态:按下或未按下。只有在按下或松开键后,操作事件才会触发。用于没有中间状态的操作,如:开枪
  • **轴映射**:它们输出一个称为轴值的数值(??)。安讯士事件将触发每一帧。通常用于需要操纵杆或鼠标的操作。
  • 要查看输入设置,请转到**编辑\项目设置**。在左侧,选择**引擎**部分下的**输入**,在**绑定**部分进入,您可以在其中设置输入。
  • image.png

    2.创建运动映射

  • **映射组**允许将多个键绑定到一个事件。

  • image.png
  • 等待进行设置**比例**字段

    3.轴值和输入刻度

  • **轴值**:是由输入类型及其使用方式确定的数值。按下按钮和按键时输出1,操纵杆输出的值介于 -1和1 之间,具体取决于方向和推力的距离。

  • 也可以使用轴值来控制 **Pawn**的速度。通过将轴值乘以速度变量来通过操纵杆调整速度。
  • 还可以使用轴值指定沿轴的方向。如果将Pawn的速度乘以正轴值将获得正偏移,使用负轴值将导致负偏移。将此偏移量添加到**Pawn**的位置将决定它向哪个方向移动。
  • **缩放**:由于键盘键只能输出轴值1或0,因此可以使用**缩放**将其**比例**转换为负数。原理:取轴值并将其乘以刻度
  • image.png

3.移动播放器

1.使用变量

在移动时,需要指定Pawn的移动速度。指定速度的一种简单方法就是将其存储在**变量**中。

  • **我的蓝图**->**变量**->**细节**
  • image.png
  • 创建变量并命名为MaxSpeed,到细节选项卡将变量类型更改为 Float/浮点型,并在工具栏中进行编译
  • **MaxSpeed****轴值**相乘,创建并选择**float * float**节点进行连接完成该操作。

    2.获取玩家方向

  • **获取Actor向前向量**:通过此节点获取Pawn面对的位置以确定玩家前进方向。

  • image.png
  • **添加移动输入**:此节点将沿方向和值取值,将其转换为存储的偏移量。
  • image.png
  • image.png
  • 白线表示执行链:当玩家移动输入轴时,将生成一个事件,该事件将执行**InputAxis MoveForward**节点,随后执行**Add Movement Input**节点
  • **Add Movement Input**节点采用以下输入:

    • **Target/目标**:设置为**self**,在此案例中为玩家
    • **World Direction/世界方向**:目标的移动方向,在此案例中为玩家面向的方向。
    • **Scale Value/缩放值**:玩家的移动量,在此案例中为**MaxSpeed * Axis Value**,范围 **-1~1**

      3.添加偏移量

  • 要实际移动Pawn,需要通过添加Add Movement Input计算偏移量,并将其添加到Pawn的位置

    • 玩家在游戏中的每一帧移动少量,将移动添加到**Event Tick/事件Tick**该事件每帧生成一次。
  • **Consume Movement Input Vector/消耗移动输入向量**:获取偏移量
  • **AddActor LocalOffset/添加Actor本地偏移**:将偏移量添加到**Actor**
  • image.png
  • 缺点**Event Tick**每帧调用一次,而高端机器渲染帧的速度更快,因此移动节点将更频繁的执行,导致Pawn在高端机器上移动速度更快,反之亦然。要解决这一点,需要移动和帧率无关。

    4.帧率独立性

    帧率独立性:无论帧率如何,一切运动将具有相同的运动结果。

  • 增量秒:自上次事件计时以来经过的时间量。通过**Consume Movement Input Vector**获得的偏移量 ,再使用 偏移量 * 增量秒 ,移动将于帧率无关

  • **偏移量 * 增量秒**:添加**Vector * Float**节点,完成链接。
  • image.png
  • 完成帧率独立性。

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**
  • image.png

    4.处理碰撞

  1. 在处理碰撞时,需要使用Overlap事件。在StaticMesh->Add Event->**OnComponentBeginOverlap/添加事件**该操作会将onComponentBeginOverlap(StaticMesh)节点添加到事件图表中。
  2. 创建**DestroyActor**节点,并将其链接到**OnComponentBeginOverlap(StaticMesh)**节点,此节点将在游戏中移除**目标Actor**,但是由于没有目标,因此该节点将摧调用它的**Actor**
    1. image.png

1.gif