虚幻官方项目《CropOut》技术解析 之 在实战中理解Enhanced Input系统

概要

在上一篇文章《虚幻官方项目《CropOut》技术解析 之 程序化岛屿生成器(IslandGenerator)》我们介绍了《CropOut》中使用Geometry Script程序化生成每个关卡的岛屿。今天再来聊一聊Enhanced InputEnhanced Input是虚幻官方想用《Crop Out》诠释的技术要点之一。其实在去年虚幻官方的直播节目中,虚幻官方已经对Enhanced Input作了比较全面深入的介绍,本文将重点分析《CropOut》中基于Enhanced Input的输入控制系统。

Enhanced Input系统基础

为了便于没接触过Enhanced Input的朋友阅读,先介绍一下这个系统,已经熟悉Enhanced Input的朋友可以跳过这个部分。

回顾旧版输入系统

定义物理按键和Action/Axis的映射

旧版输入系统大家都不陌生,我们在Engine>Input中配置Action/Axis和物理按键的对应关系

在这里插入图片描述

上述配置会静态记录在DefaultInput.ini文件中
在这里插入图片描述

输入事件

接下来DefaultInput.ini中定义的Action会被反射到蓝图中成为输入事件,当运行时有相应的物理按键被按下就会触发后面的游戏逻辑

在这里插入图片描述

把上述映射关系抽象出来其实就是:

在这里插入图片描述

旧版输入系统我们用了很久,并没有觉得有什么不妥,遇到一些问题也有成熟的解决方案,那么新版的“提升”在于哪些方面呢?

Enhanced Input系统

从使用的角度,新的Enhanced Input系统有几个最显著的变化:

统一的Action

将之前的ActionAxis统一为Action,并且使用Input Action资源来定义它们,每个Input Action资源文件定义了一个Action:

在这里插入图片描述

Input Mapping Context

使用Input Mapping Context资源文件定义物理按键和Action的映射关系等信息:

在这里插入图片描述

在这里插入图片描述
Input Mapping Context资源文件的内容很像旧系统中配置Action/Axis和物理按键的对应关系的界面。并且一个项目可以配置多个Input Mapping Context

输入事件

同样的,当运行时有相应的物理按键被按下就会触发后面的游戏逻辑,我们可以看到输入事件有了更多更细分的状态引脚

在这里插入图片描述

把上述映射关系抽象出来其实就是:

在这里插入图片描述

上述改变的意义是什么呢?由于Input Mapping Context是资源文件,于是就允许我们在游戏的运行时对Input Mapping Context进行动态装卸,每个Input Mapping Context都是一组Action的集合,只有当Action所属Input Mapping Context被加载,该Action才会被触发。所以每一个Input Mapping Context其实就是一个输入模块。

在这里插入图片描述

这样我们就可以轻松列举出Enhanced Input系统模块化的几大优点了:

  • 在不同的模式(状态)下可以加载对应的Input Mapping Context,很方便地隔离不同模式(状态)下输入事件触发的游戏逻辑
  • 可以对Input Mapping Context分层管理(在《Crop Out》中会有例子)
  • 运行时系统只需要轮询当前加载的Input Mapping Context中的Action,一定成度上提升了效率
  • 刚才说到更多更细分的状态引脚也节省了我们很多代码

当然Enhanced Input系统的提升还不止是这些。接下来我们结合虚幻官方示例项目《Crop Out》尝试在实战中理解Enhanced Input系统。

《Crop Out》

在阅读下文之前建议先上手试玩一下《Crop Out》或者看一下官方的导览视频

[教程]《Cropout》休闲RTS示例项目导览(官方字幕)

游戏中的Player是实际是一个如下图所示的Pawn
在这里插入图片描述

《Crop Out》中基于Enhanced Input的输入控制系统

Input Mapping Context分层管理

《Crop Out》中一共包含4个Input Mapping Context并且按照他们的有效周期可以分成了3个层次:

BP_Player

在这里插入图片描述

  • 第1层 IMC_BaseInput:在游戏运行中全程有效,包含使用键盘、Gamepad、鼠标滚轮实施屏幕移动、缩放、旋转操作

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 第2层 IMC_Villager_ModeIMC_BuildMode:分别在Villager Mode和Build Mode有效,对应着两种模式下的不同操作方式

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 第3层 IMC_DragMove:用鼠标和触摸屏实施的拖拽操作,仅在Villager模式的特定条件下有效。

在这里插入图片描述

在这里插入图片描述

输入修改器(Input Modifier)

Enhanced Input还提供了输入修改器(Input Modifier),允许用户将初始值程序化地映射(修正)成新的值,并且多个输入修改器还可以串联起来形成队列,从而应对更复杂的需求。

预设输入修改器

Enhanced Input提供了一系列的预设输入修改器

  • DeadZone:限定值的范围
  • Scalar: 缩放一个标量
  • Negate: 取反
  • Smooth: 多帧之间平滑
  • CurveExponential: 指数曲线,XYZ
  • CurveUser: 自定义指数曲线,CurveFloat
  • FOVScaling: FOV缩放
  • ToWorldSpace: 输入设备坐标系向世界坐标系转换 (调换XYZ顺序)
  • SwizzleAxis: 互换轴值
  • Collection: 嵌套子修改器集合

《Crop Out》中的自定义输入修改器

还可以自定义输入修改器,《Crop Out》中自定义了2个输入修改器,分别使用在下图所示的位置:
在这里插入图片描述
它们分别是对出,触摸屏设备的手势操作的初始值进行归一化以及偏移修正。

IM_Normalize

在这里插入图片描述

IM_Offset

在这里插入图片描述

一些琐碎的知识点

如何判断当前控制器类型

BP_PC(Player Controller)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开发游戏的老王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值