GameplayAbilitiesSystem(六)

目录

前言

上一章节我们创建了角色和敌人,并给角色添加了状态和动画,但是角色还不能移动。或者说角色还不能被玩家控制,这次我们给游戏加入控制系统,让角色动起来。

增强输入系统

UE 为我们提供了一套输入系统,用于控制游戏中的角色。

其中最主要的组件就是 Input Action,它会接收来自键盘的输入,并将其转化用于控制角色移动的输出变量。

Input Action

引入 Input Action 之前,我们先在 Content -> Blueprints 目录下为其新建一个名为 Input 文件夹,再在 Input 下面新建一个名为 InputActions 文件夹来管理所有 Input Action 对象。

你可能会发现,既然是在 Blueprints 下面,Input Action 是蓝图类无疑。

InputActions 文件夹下右键选择 Input -> Input Action,并命名为 IA_Move,然后双击打开该蓝图类。

Input Action 组件有很多属性,我们首先关注 Value Type。

俯视角游戏中的角色移动主要是在平面内,即前后左右,对应到坐标系中则为 x, y,可以看成一个二维矢量。所以我们将 Value Type 设置为 Axis2D(Vector2D)。

Axis2D 类型的 Input Action 包含两个属性 x 和 y,可以将 x 看作左右方向,y 看作前后方向,当然你也将二者交换。

虽然有了输入 Input Action,但它只是用来接收输入设备的按键数据,要将其与角色关联起来,还需要有一套按键映射的逻辑,而承担这一任务的就是输入映射上下文(Input Mapping Context)。输入映射上下文中会将(键盘按键)输入与 IA_Move(Input Action)进行关联。

回到 Input 文件夹右键选择 Input -> Input Mapping Context,将其命名为 IMC_AuraContext。

双击打开 IMC_AuraContext,点击 Mappings 右侧 + 号,然后下拉选择我们刚刚创建的 IA_Move,会看到下面出现一堆属性。点击键盘图标,按下键盘上的 D 键,则第一个映射就加好了。

再次点击 + 号,同样操作按下 A 键,则会再添加一个映射,如果 D 键映射为 x 正方向(右),那么 A 需要映射为相反方向,所以这里需要一个 修改器(Modifier)。点开 A 映射的 Modifier,下拉选择 Negate,再点开 Index 会看到对应坐标系的三个属性 x,y,z,其中 z 对平面移动来说没有意义,取消掉,而 y 表示前后,也取消掉。这样左右移动的映射就搞定了。

用同样的方法再添加 y 方向上的按键,比如 W 为向前移动,S 为向后移动。但是有一点需要注意,在按下 W 时我们只想得到 y 方向上的一个正值,而不是 x 方向上的值,因此需要给它加上一个修饰符,使其权接收 y 方向的输入数据。按下键盘图标,按下 W 键,然后添加一个 Modifier,并指定其类型为 Swizzle Input Axis Values,这时点开 Index 会看到不再是 xyz 顺序,而是 Y 在前,即 W 会接收 y 轴方向的输入数据。同样我们再添加 S 键,但其接收的数据为 y 轴负方向的值,所以要设置为 negate。

四个按键设置好后如下图所示:

这样我们就定义好了一套按键的映射关系,即 DA 分别代表 x 轴正负方向 ,WS 分别代表 y 轴的正负方向。

角色控制器

我们有了输入系统并将其与游戏中的坐标系绑定,现在需要用这些数据来移动角色。当然可以在角色类中来实现这一功能,但我们更倾向于另外添加一个角色控制类来处理角色的控制,而不至于让角色承担过多职责。

创建类的步骤之前我们已经很熟悉,好在 UE 也为我们提供了 Player Controller 类,直接在 C++ Classes -> Aura -> Public 下面右键选择 Player Controller,Path 下添加一级 Player,并将其命名为 AuraPlayerController。

关闭游戏引擎回到 Visual Studio 2022 可以看到,新添加的 C++ 类 AuraPlayerController.cpp 及其头文件已经为我们添加好。

接下来就是将刚才添加的 IA_Move、IMC_AuraController 通过 AuraPlayerController 与我们的角色类关联起来,这一部分留待下一章节继续。

相关推荐
麦克马5 天前
GameplayAbilitiesSystem(九)
gas
麦克马13 天前
GameplayAbilitiesSystem(八)
gas
晴夏。4 个月前
GAS下的网络同步的全面分析【超级全面】
游戏引擎·ue·gas·网络同步
麦克马4 个月前
GameplayAbilitiesSystem(四)
gas
麦克马4 个月前
GameplayAbilitiesSystem(五)
gas
麦克马4 个月前
GameplayAbilitiesSystem(三)
gas
妙为4 个月前
UE5中武器未跟随角色
ue5·gas·gameplay
Joy T5 个月前
【Web3】深入解析Coin-Token、ERC20-ERC721、自定义错误机制与合约继承
web3·代币·自定义错误·gas·erc-20·原生币·合约继承
qq_428639618 个月前
aura:学习大纲
gas·aura