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 与我们的角色类关联起来,这一部分留待下一章节继续。

相关推荐
晴夏。1 个月前
GAS下的网络同步的全面分析【超级全面】
游戏引擎·ue·gas·网络同步
麦克马1 个月前
GameplayAbilitiesSystem(四)
gas
麦克马1 个月前
GameplayAbilitiesSystem(五)
gas
麦克马1 个月前
GameplayAbilitiesSystem(三)
gas
妙为1 个月前
UE5中武器未跟随角色
ue5·gas·gameplay
Joy T2 个月前
【Web3】深入解析Coin-Token、ERC20-ERC721、自定义错误机制与合约继承
web3·代币·自定义错误·gas·erc-20·原生币·合约继承
qq_428639616 个月前
aura:学习大纲
gas·aura
许强0xq6 个月前
Q10: 对于地址白名单,使用 mapping 还是 array 更好?为什么?
面试·职场和发展·web3·solidity·evm·gas
小码闭眼ctrv8 个月前
gas 优化
区块链·solidity·gas