用人话讲!虚幻引擎 UE5 增强输入系统(蓝图篇)

注意:以下内容均基于个人理解,可能出现,误导,片面,错误等信息。请谨慎观看。

为什么要使用 增强输入系统 ?

从 UE5.1版本起 UE默认的输入都改成了 Enhanced Input (增强输入系统)
那么为什么要这样呢?简单举个栗子
比如我们的游戏角色 包含移动射击以及使用载具的功能
默认状态下 :

WSAD移动 左键射击

使用载具状态下 :

WASD移动 左键鸣笛

不难发现 其中两种操作中 只有 左键 的操作是不相同的
如果我们按照面向对象的角度来思考
可以将 WASD移动 的操作提出 在两种状态下共用
左键 则分别对应两种不同的状态进行定制
这样既方便维护也减少了BUG的产生。
至此我们就获得了 增强输入系统第一个新概念 输入映射向下文(Input Mapping Contexts)

输入映射向下文(Input Mapping Contexts)

输入映射向下文 简单粗俗来讲 ,就是上述的两种不同状态
并且你可以为一个状态指定多个输入映射上下文
那么就可以将上述的 状态操作 变成三个输入映射上下文!

输入映射向下文对应操作
输入映射向下文1WASD移动
输入映射向下文2左键鸣笛
输入映射向下文3左键射击

这样一来 :
载具状态下 : 我们可以为输入系统指定输入上下文为 输入映射向下文1输入映射向下文2
默认状态下 : 我们可以为输入系统指定输入上下文为 输入映射向下文1输入映射向下文3
这样就方便的实现了上述的情景

增强输入系统详解

概念组成

增强输入系统主要有四个概念: 除了上述的 输入映射向下文(Input Mapping Contexts) 还有
输入动作(Input Actions): 指具体动作内容 例如上文具体的 ‘移动’ ‘开枪’ ‘鸣笛’ 即具体的一个事件\行为。
修饰器(Modifiers):简单来讲就是原本输入的值进行修正,比如判断死区 ,根据FOV放大缩小输入值,取相反值等。
触发器(Triggers): 就是指在什么条件下才能触发或者如何触发 比如 长按,单击,按下,松开。
有点懵也很正常,下面我们分别讲讲这四个概念。

1. 输入映射向下文(Input Mapping Contexts)

如上文所述 主要针对不同状态 映射一套操作,来应对不同的情景 。
我们可以在里面对 输入动作(Input Actions) 映射不同的按键映射(具体的按下哪个键之类)
虚幻样例中的输入映射上下文
这是虚幻引擎模板中的输入映射向下文,其中 IA_Jump 、IA_Move 等 均为 输入动作(Input Actions)
并且为 输入动作(Input Actions) 指定了多个按键映射
空格手柄按下触摸1 均可触发 IA_Jump 这一输入动作
其中我们还可以对不同按键单独设置 触发器修饰器 。(下文细嗦

2. 输入动作(Input Actions)

输入动作 指的是具体的一个行为或者动作 ,并且可以使用 触发器修饰器 进行精确描述,例如长按奔跑,单击下蹲等。
其实做主要的是需要指定对应动作 返回的值类型 即 图中 值类型
栗如 开门 只有 开和不开两种 即 数字(布尔型)
栗如 移动 是一个轴值输入 即 Axis1D (浮点型)
在这里插入图片描述

  • 消耗输入: 当消耗输入为真时 高优先级的输入将覆盖低优先级的操作
    例如将上文中 左键开枪左键鸣笛 的 同时添加到输入系统中
    如果消耗输入为 False 那么 按下左键将 同时执行 开枪和鸣笛两个动作
    输入没有被上层输入上下文消耗 传递到了下一层输入上下文中。
    如果消耗输入为 True 那么按下左键将只执行 鸣笛 和 开枪 中 上下文优先级高的一个
    输入在上层输入上下文中消耗掉了
  • 暂停时触发 : 当游戏暂停时 是否有效

3.修饰器(Modifiers)

修饰器就是对原始输入的处理。主要包含以下
在这里插入图片描述

  1. 到世界空间 : 将一个 2D 的输入转换为 3D 的输入 例如将手柄的 XY轴输入映射为 XYZ输入 其中X为0。 作用和 拌合输入轴值 类似
  2. 否定 : 很容易理解 - 将输入的值取反 例 :原始输入 1 那么 经过修饰变为 -1 。可以单独指定对 XYZ哪一个轴取反
  3. 响应曲线 - 指数 :主要用于手柄或者其他线性输入,将输入响应对应为曲线 可以分别映射XYZ三轴的曲线
  4. 响应曲线 - 用户定义 : 同上 只不过用自定义曲线代替了指数曲线 可以分别映射XYZ三轴的曲线
  5. 平滑 : 对每一帧进行平滑处理 , 基本没用过 感受不到什么差距 (不清楚具体用途
  6. 拌合输入轴值 : 将一个轴的输入对应到其他轴 ,例如将手柄 X轴输入 映射到Y轴 其实应该翻译成 交换输入轴值
  7. 按差量时间缩放 :将输入的值 乘以每帧的时间间隔,常用的修饰 ,可以实现在不同帧率情况下使得输入值总大小不变。
  8. 标量 :将原本0~1的轴值 映射到 任意大小 可以分别为XYZ轴设置不同的标量
  9. 盲区即死区,一般用于手柄等线性输入,即摇杆或者扳机键按到或者推倒什么区间响应 。
  10. 视野缩放 :即根据FOV(视场)的值 调整输入的值大小 可以具体对应调整比例

关于 拌合输入轴值 可以参阅 我的另一篇文章
注意 修饰器可以同时应用多个 并且会 从上到下依次调用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
修饰顺序不同导致产生不同的输入结果

4. 触发器(Triggers)

触发器即为什么操作触发对应行为 主要包含以下
在这里插入图片描述

  1. 下移 : 即按下 按下后将持续触发 —— 对于线性按键可以指定阈值(按下多少大距离触发)
  2. 已按下 : 同上! 不过 按下后只触发一次
  3. 已松开 : 松开按键时 触发一次
  4. 弦操作 : 当另一个 输入动作 触发时 才能 通过按键触发当前动作(持续触发) —— 例如 移动 的时候才能 奔跑
  5. 点按 : 必须在指定时间内松开按键才会 触发一次 —— 可以设置具体松开时间 阈值
  6. 组合 : 弦操作的Plus版本 ,可以指定 另外数个动作不同阶段触发或者非触发状态下才能 通过按键触发当前动作。 例如只能在 没有移动 的情况下 蹲下
  7. 脉冲 : 当长按时 以一定时间间隔触发 ,例如 实现每隔0.2秒触发一次 最多触发 n 次 | PS:如果单击的话将触发一次
  8. 长按 : 嗯!长按时候持续触发 可以设置长按多久触发
  9. 长按和松开 : 在长按后 松开时候 触发一次

蓝图应用

添加映射上下文

通过 获取 玩家控制器 来 添加\移除 映射上下文
其中 Priority 为优先级 高优先级优先触发 并且将影响上文提到的按键消耗

在这里插入图片描述

输入动作事件

在这里插入图片描述

名称解释
Triggered当触发时调用(即满足上文中提到的触发器的条件)
Started当绑定的按键按下时调用(不论是否达到触发条件都会调用)
Ongoing当绑定的按键按下时 并且未触发 持续调用
Canceled当绑定的按键按下但是没能达到触发条件时调用
Completed当触发事件结束后调用
Action Value输入对应的输入值
Elapsed Seconds经过的时间:从按下按键经过的时间
Triggered Seconds触发的时间:从触发开始经过的时间
Input Action触发的输入动作名称

举个例子

在这里插入图片描述
如图当调用这个 长按 W 的时候 调用顺序如下
--------------------------------------- 按下按键 —
Started (一次)
Ongoing (持续一秒)
Triggered (持续触发)
--------------------------------------- 松开按键 ----
Completed (触发一次)
--------------------------------------- 按下按键 —
Started (一次)
Ongoing (持续触发)
--------------------------------------- 在触发前松开按键 ----
Canceled(一次)


大概就这么多吧!

  • 46
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值