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

文章目录

  • 概要
  • Enhanced Input系统基础
    • 回顾旧版输入系统
      • 定义物理按键和Action/Axis的映射
      • 输入事件
    • Enhanced Input系统
      • 统一的Action
      • Input Mapping Context
      • 输入事件
  • 《Crop Out》
  • 《Crop Out》中基于Enhanced Input的输入控制系统
    • Input Mapping Context分层管理
    • 输入修改器(Input Modifier)
      • 预设输入修改器
      • 《Crop Out》中的自定义输入修改器
  • 一些琐碎的知识点
    • 如何判断当前控制器类型

概要

在上一篇文章《虚幻官方项目《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)
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/93127.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据库相关知识2

数据库知识2 关系完整性 数据完整性 指的是数据库中的数据的准确性和可靠性 实体完整性约束: 目的: 在表中至少有一个唯一的 标识,主属性字段中,不为空,不重复 主键约束:唯一 不重复 不为空 primary k…

系统架构设计高级技能 · Web架构

现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everything is for the future of dream weaving wings, let the dream fly in reality. 点击进入系列文章目录 系统架构设计高级技能 Web架构 一、Web架构介绍1.1 Web架构涉及技术1.2 单台服务…

docker-compose管理创建LNMP服务并运行Wordpress网站平台

文章目录 一.项目环境1. 环境描述2.项目需求 二.部署过程1.安装Docker2.安装Docker加速器3.Docker-Compose安装部署4.准备依赖文件、配置nginx5.配置mysql6.配置php7.编写docker-compose.yml8.验证 三.容器快照,然后将Docker镜像打包成tar包备…

十人拼购消费全返,全民拼购模式

传统的消费模式已经满足不了消费者们的消费心理,企业要去琢磨大众的消费心理,对于消费者来说,实际性的购物是必须的,但是平台商家吸引的亮点莫过于就是消费返利,不少商城平台包括店面都存在这种消费返利的形式&#xf…

Python 包管理(pip、conda)基本使用指南

Python 包管理 概述 介绍 Python 有丰富的开源的第三方库和包,可以帮助完成各种任务,扩展 Python 的功能,例如 NumPy 用于科学计算,Pandas 用于数据处理,Matplotlib 用于绘图等。在开始编写 Pytlhon 程序之前&#…

在云原生时代,构建高效的大数据存储与分析平台

文章目录 1. **选择适当的数据存储技术:**2. **采用分布式架构:**3. **数据分区和索引:**4. **采用列式存储:**5. **数据压缩和编码:**6. **使用缓存技术:**7. **数据分片和复制:**8. **自动化运…

ssm端游游戏账号销售管理系统源码和论文

ssm端游游戏账号销售管理系统源码和论文069 开发工具:idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 技术:ssm 摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面…

高忆管理:历次“回购潮”后市场怎么走?且看A股大数据

8月16日至现在,A股商场发表回购事项的公司数量算计现已超越200家,数量和密度较之前显着增加,构成最新一波“回购潮”。 若从提议回购的计算口径来看,8月16日至现在不到10天的时间里,超越60家公司发表提议回购公告&…

Windows平台Unity下播放RTSP或RTMP如何开启硬解码?

我们在做Windows平台Unity播放RTMP或RTSP的时候,遇到这样的问题,比如展会、安防监控等场景下,需要同时播放多路RTMP或RTSP流,这样对设备性能,提出来更高的要求。 虽然我们软解码,已经做的资源占有非常低了…

2.3 【MySQL】命令行和配置文件中启动选项的区别

在命令行上指定的绝大部分启动选项都可以放到配置文件中,但是有一些选项是专门为命令行设计的,比方说defaults-extra-file 、 defaults-file 这样的选项本身就是为了指定配置文件路径的,再放在配置文件中使用就没啥意义了。 如果同一个启动选…

喜报|星瑞格荣获“2022-2023年度国产数据库应用优秀解决方案”奖项

近日,赛迪网为表彰数字赛道上的先行者,联合《数字经济》杂志社和北京科创互联,共同组织以“树立行业标杆,引领服务创新”为中心的“2022-2023年度产业数字服务案例及创新成果征集活动”。该活动旨在鼓励各行业数字化应用技术创新树…

【Java 中级】一文精通 Spring MVC - 数据验证(七)

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区&#x…

uniapp 实现切换tab锚点定位到指定位置

1.主要使用uniapp scroll-view 组件的scroll-into-view属性实现功能 2.代码如下 <scroll-view:scroll-into-view"intoView"><u-tabsclass"tabs-list"change"tabChange":list"tabList"></u-tabs><view id"1&…

运算符(个人学习笔记黑马学习)

算数运算符 加减乘除 #include <iostream> using namespace std;int main() {int a1 10;int a2 20;cout << a1 a2 << endl;cout << a1 - a2 << endl;cout << a1 * a2 << endl;cout << a1 / a2 << endl;/*double a3 …

Java“牵手”天猫淘口令转换API接口数据,天猫API接口申请指南

天猫平台商品淘口令接口是开放平台提供的一种API接口&#xff0c;通过调用API接口&#xff0c;开发者可以获取天猫商品的标题、价格、库存、商品快递费用&#xff0c;宝贝ID&#xff0c;发货地&#xff0c;区域ID&#xff0c;快递费用&#xff0c;月销量、总销量、库存、详情描…

【OpenCV • c++】图像对比度调整 | 图像亮度调整

&#x1f680; 个人简介&#xff1a;CSDN「博客新星」TOP 10 &#xff0c; C/C 领域新星创作者&#x1f49f; 作 者&#xff1a;锡兰_CC ❣️&#x1f4dd; 专 栏&#xff1a;【OpenCV • c】计算机视觉&#x1f308; 若有帮助&#xff0c;还请关注➕点赞➕收藏&#xff…

MR混合现实石油化工课堂情景实训教学演示

MR&#xff08;混合现实&#xff09;技术是一种结合了虚拟现实&#xff08;VR&#xff09;和增强现实&#xff08;AR&#xff09;优势的新型技术&#xff0c;在教育领域具有广阔的应用前景。在石油化工课堂中&#xff0c;MR混合现实情景实训教学的应用可以大大提高学生的学习效…

AI时代,程序员需要焦虑吗?

原文来自 微信公众号"互联网技术人进阶之路". 目录 前言一、程序员会被 AI 取代么&#xff1f;二、服务端开发尚难被 AI 取代三、服务端开发何去何从&#xff1f;四、业界首部体系化、全景式解读服务端开发的著作第一部分&#xff1a;服务端开发的技术和方法第二部分…

OVRL-V2: A simple state-of-art baseline for IMAGENAV and OBJECTNAV 论文阅读

论文信息 题目&#xff1a;OVRL-V2: A simple state-of-art baseline for IMAGENAV and OBJECTNAV 作者:Karmesh Yadav&#xff0c; Arjun Majumdar&#xff0c; Ram Ramrakhya 来源&#xff1a;arxiv 时间&#xff1a;2023 代码地址&#xff1a; https://github.com/ykarmesh…

好用的可视化大屏适配方案

1、scale方案 优点&#xff1a;使用scale适配是最快且有效的&#xff08;等比缩放&#xff09; 缺点&#xff1a; 等比缩放时&#xff0c;项目的上下或者左右是肯定会有留白的 实现步骤 <div className"screen-wrapper"><div className"screen"…