UE5增强输入系统入门

UE4直接在项目设置里设置的轴映射和操作映射在UE5中被标记为废弃,改为使用增强输入系统。

这两天学习了下蓝图和c++中增强输入系统的使用,在这里分享一下。

学习使用的模板是第三人称模板(蓝图/c++),代码蓝图都参考的模板。

增强输入系统

UE5中加入的用来处理输入的系统。

分为两部分,分别是输入操作输入映射情境。在虚幻编辑器中通过右键添加->输入->输入操作/输入映射情境来创建。

请添加图片描述

输入操作 InputAction

顾名思义,用来绑定特定的操作,例如键盘、鼠标、手柄的某个按键。

ThirdPerson/Blueprints/Input/Actions目录下,可以看到模板自带的几个输入操作

请添加图片描述

我们双击点开IA_Move查看细节

请添加图片描述

看到值类型为Axis2D,这个值类型是用来设置输入的值的,因为移动是一个X,Y轴上的二维操作,所以我们选择Axis2D,如果是跳跃的话,则使用数字(布尔)

模板通过创建输入操作成功绑定了几种输入操作,分别是观察、跳跃和移动,接下来我们将在输入映射情境中为输入操作绑定按键和设置。

输入映射情境 InputMappingContext

用来给输入操作绑定具体的按键和一些处理的资产。

ThirdPerson/Blueprints/Input中,已经有一个IMC_Default的输入映射情境,可以打开看一下怎么使用。

请添加图片描述

通过映射旁边的加号可以添加操作映射,新建后首先选择我们的一个输入操作,例如第一个的IA_Jump,之后点击旁边的加号为IA_Jump操作进行控制绑定。可以看到这里为IA_Jump跳跃绑定了键盘空格、手柄正面按钮下和触摸1。IA_Move移动绑定了键盘WASD,上下左右键和手柄左摇杆2D轴。

点开每个按键的下三角,可以看到可以配置触发器和修改器,用于在按下后进行一个设置。由于跳跃比较简单,所以没有触发器和修改器。我们看看WS按键的相关设置

请添加图片描述

W键在修改器中添加了一个拌合输入轴值,这个是用例交换X、Y轴的,如果不设置这个,默认是X轴的移动,也就是向右走。

S键在W键的基础上设置了一个否定,也就是去负值,表示向后走。

其他按键可自行查看。

使用

现在我们有了输入操作和输入映射情境后就已经做好了一套输入映射,例如WASD移动、空格跳跃等,接下来我们要在蓝图和C++中使用我们做好的绑定。

蓝图中

我们查看/content/ThirdPerson/Blueprints/BP_ThirdPersonCharacter的事件图表,在最上面首先绑定了输入映射情境

请添加图片描述

之后对每个输入映射都进行了相应的处理,我们先看移动输入

请添加图片描述

这里IA_MoveActionValue是一个二维向量,因为在IA_Move里设置的值类型为Axis2D,X轴表示左右移动,Y轴表示前后移动,这里具体的值取决于我们是键盘还是手柄,键盘是话应该就是1,手柄则是根据左摇杆划的程度来获得一个0~1的值。选择Triggered来连线表示持续触发。如果是跳跃操作,应该选择Started,可自行查看。

如此我们就在蓝图中完成了使用增强输入系统。

c++

c++中我们的角色基类为项目名+Character.h,以下为源代码

// Copyright Epic Games, Inc. All Rights Reserved.#pragma once#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "Logging/LogMacros.h"
#include "ThirdPersonCppDemoCharacter.generated.h"class USpringArmComponent;
class UCameraComponent;
class UInputMappingContext;
class UInputAction;
struct FInputActionValue;DECLARE_LOG_CATEGORY_EXTERN(LogTemplateCharacter, Log, All);UCLASS(config=Game)
class AThirdPersonCppDemoCharacter : public ACharacter
{GENERATED_BODY()/** Camera boom positioning the camera behind the character */UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true"))USpringArmComponent* CameraBoom;/** Follow camera */UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true"))UCameraComponent* FollowCamera;/** MappingContext */UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))UInputMappingContext* DefaultMappingContext;/** Jump Input Action */UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))UInputAction* JumpAction;/** Move Input Action */UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))UInputAction* MoveAction;/** Look Input Action */UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))UInputAction* LookAction;public:AThirdPersonCppDemoCharacter();protected:/** Called for movement input */void Move(const FInputActionValue& Value);/** Called for looking input */void Look(const FInputActionValue& Value);protected:// APawn interfacevirtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;// To add mapping contextvirtual void BeginPlay();public:/** Returns CameraBoom subobject **/FORCEINLINE class USpringArmComponent* GetCameraBoom() const { return CameraBoom; }/** Returns FollowCamera subobject **/FORCEINLINE class UCameraComponent* GetFollowCamera() const { return FollowCamera; }};

可以看到,这里创建了几个UInputAction类对象,对应的就是输入操作UInputMappingContext* DefaultMappingContext;对应的是输入映射情境,我们设置为蓝图可编辑,之后派生出蓝图类后在类默认值那里可以设置。在BeginPlay函数中,把DefaultMappingContext给了增强输入系统。

	if (APlayerController* PlayerController = Cast<APlayerController>(Controller)){if (UEnhancedInputLocalPlayerSubsystem* Subsystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(PlayerController->GetLocalPlayer())){Subsystem->AddMappingContext(DefaultMappingContext, 0);}}

virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;APawn的接口,我们需要实现它,它就是用来设置按键按下后的反应。此为模板为跳跃、移动和观察实现的该函数。

void AThirdPersonCppDemoCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{// Set up action bindingsif (UEnhancedInputComponent* EnhancedInputComponent = Cast<UEnhancedInputComponent>(PlayerInputComponent)) {// JumpingEnhancedInputComponent->BindAction(JumpAction, ETriggerEvent::Started, this, &ACharacter::Jump);EnhancedInputComponent->BindAction(JumpAction, ETriggerEvent::Completed, this, &ACharacter::StopJumping);// MovingEnhancedInputComponent->BindAction(MoveAction, ETriggerEvent::Triggered, this, &AThirdPersonCppDemoCharacter::Move);// LookingEnhancedInputComponent->BindAction(LookAction, ETriggerEvent::Triggered, this, &AThirdPersonCppDemoCharacter::Look);}else{UE_LOG(LogTemplateCharacter, Error, TEXT("'%s' Failed to find an Enhanced Input component! This template is built to use the Enhanced Input system. If you intend to use the legacy system, then you will need to update this C++ file."), *GetNameSafe(this));}
}

上面代码段中的Move、Look函数为模板实现的函数

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简单、实用、免费、无广告的图片自由分割工具

一、简介 1、是来自 Github 的一款简单、实用、免费、无广告的图片自由分割工具。它安装包大小在 4.5MB 左右,目前仅支持 Windows 和 Web 平台。 2、基本功能:支持图片自由纵向分割,横向分割,宫格分割,低仿 wps 看图图片分割,分割完成后,打开电脑的下载目录即可查看包含…

python-旋转字符串

问题描述&#xff1a;给定一个字符串&#xff08;以字符串数组的形式&#xff09;和一个偏移量&#xff0c;根据偏移量从左到右地旋转字符数组。 问题示例&#xff1a;输入str”abcdefg”,offset3,输出“efgabcd”。输入str”abcdefg”,offset0,输出“abcdefg”。&#xff08;返…

clion配置ssh隧道转发 实现远程主机功能

clion配置ssh隧道转发 clion自带的ssh配置只能配置主机和用户名的格式来实现ssh&#xff0c;因此如果需要通过中间设备来访问调试主机的话就无法使用了。 配置ssh隧道的方式有两种&#xff0c;一种是直接配置 ~/.ssh/config 配置文件&#xff0c;一种是使用跳板机工具。clion…

Python热重载调试新利器

你一定遇到过这种情况&#xff1a;Python脚本已经运行&#xff0c;却发现自己忘记打印输出需要记录的信息(比如for循环中打印更多详细信息)。 此时&#xff0c;如若暂停运行的代码&#xff0c;修改补充再重新运行整个代码&#xff0c;尤其对于已经运行数多个小时的模型训练来说…

生成式 AI——ChatGPT、Dall-E、Midjourney 等算法理念探讨

1.概述 艺术、交流以及我们对现实世界的认知正在迅速地转变。如果我们回顾人类创新的历史&#xff0c;我们可能会认为轮子的发明或电的发现是巨大的飞跃。今天&#xff0c;一场新的革命正在发生——弥合人类创造力和机器计算之间的鸿沟。这正是生成式人工智能。 生成模型正在模…

python替换“${}“占位符为变量,实现读取配置文件

文章目录 背景1、定义正则表达式2、替换变量占位符3、实现功能 背景 使用python编写小工具&#xff0c;有一个配置文件&#xff0c;希望实现类似shell命令的&#xff0c;定义变量并且使用${}或者$来引用。如果有好的建议欢迎讨论。 配置文件示例内容如下: D:\project\test\pr…

IGraph使用实例——线性代数计算(blas)

1 概述 在图论中&#xff0c;BLAS&#xff08;Basic Linear Algebra Subprograms&#xff09;并不直接应用于图论的计算&#xff0c;而是作为一套线性代数计算中通用的基本运算操作函数集合&#xff0c;用于进行向量和矩阵的基本运算。然而&#xff0c;这些基本运算在图论的相…

csrf漏洞与ssrf漏洞

环境&#xff1a;用kali搭建的pikachu靶场 一.CSRF 1.CSRF漏洞简介 跨站请求伪造&#xff08;CSRF&#xff09;漏洞是一种Web应用程序安全漏洞&#xff0c;攻击者通过伪装成受信任用户的请求来执行未经授权的操作。这可能导致用户在不知情的情况下执行某些敏感操作&#xff0…

遥感之特征选择-禁忌搜索算法

各类智能优化算法其主要区别在于算法的运行规则不同&#xff0c;比如常用的遗传算法&#xff0c;其规则就是变异&#xff0c;交叉和选择等&#xff0c;各种不同的变体大多是在框架内的实现细节不同&#xff0c;而本文中的禁忌算法也是如此&#xff0c;其算法框架如下进行介绍。…

丰盘v24.5集成OnlyOffice 7.5版本,支持子管理员高级特性

五一劳动节刚过&#xff0c;我们的开发小伙伴上线发布了v24.5版本&#xff0c;支持原生集成OnlyOffice 7.5的套件版本&#xff0c;无需管理员手工配置密钥证书等繁琐操作&#xff0c;对Word、PPT和Excel文件有了更强的兼容性和稳定性&#xff0c;例如当文件里包含Visio图像时&a…

C之动态内存管理(动态内存开辟与调整等)

目录 1.为什么要有动态内存分配 2.malloc、calloc、realloc和free malloc&#xff1a; calloc&#xff1a; realloc&#xff1a; free&#xff1a; 3.常见的动态内存的错误 3.1&#xff1a;对NULL指针的解引用操作 3.2&#xff1a;对动态开辟空间的越界访问 3.3&…

长城电脑如何恢复删除文件?盘点几个实用方法

咨询&#xff1a;急求帮助&#xff01;我不慎在长城电脑上删除了文件&#xff0c;还有机会恢复吗&#xff1f;一个疏忽&#xff0c;就把一份至关重要的工作文件给删掉了&#xff01;请大家快快伸出援手&#xff0c;帮我找回这份文件吧&#xff01; 在使用长城电脑的过程中&…

Linux_应用篇(11) 线程

上一章&#xff0c;学习了进程相关的知识内容&#xff0c; 对进程有了一个比较全面的认识和理解&#xff1b; 本章开始&#xff0c; 将学习 Linux应用编程中非常重要的编程技巧---线程&#xff08;Thread&#xff09; &#xff1b;与进程类似&#xff0c;线程是允许应用程序并发…

GaussDB数据库如何创建修改数据库和数据表

目录 一、背景 二、创建数据库和数据表 1. 创建数据库 2.创建数据表 三、修改表结构 1. 添加列 2. 修改列 3. 删除列 四、添加约束 1. 添加主键约束 2. 添加外键约束 3.添加唯一性约束 五、示例代码 -- 创建数据库 -- 使用新创建的数据库 -- 创建 department 表…

发送Http请求的两种方式

说明&#xff1a;在项目中&#xff0c;我们有时会需要调用第三方接口&#xff0c;获取调用结果&#xff0c;来实现自己的业务逻辑。调用第三方接口&#xff0c;通常是双方确定好&#xff0c;由对方开放一个接口&#xff0c;需要我们根据他们提供的接口文档&#xff0c;组装Http…

MySQL 使用方法以及教程

一、引言 MySQL是一个流行的开源关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;广泛应用于Web开发、数据分析等领域。它提供了高效、稳定的数据存储和查询功能。同时&#xff0c;Python作为一种强大的编程语言&#xff0c;也提供了多种与MySQL交互的库&#…

Ubuntu 24.04 LTS 安装Docker

1 更新软件包索引&#xff1a; sudo apt-get update 2 安装必要的软件包&#xff0c;以允许apt通过HTTPS使用仓库&#xff1a; sudo apt-get install apt-transport-https ca-certificates curl software-properties-common 3 添加Docker的官方GPG密钥&#xff1a; curl -fs…

算法金 | 你真的完全理解 Logistic 回归算法了吗

大侠幸会&#xff0c;在下全网同名「算法金」 0 基础转 AI 上岸&#xff0c;多个算法赛 Top 「日更万日&#xff0c;让更多人享受智能乐趣」 今日 178/10000 1. 引言 吴恩达&#xff1a;机器学习的六个核心算法&#xff01;&#xff0c; 通透&#xff01;&#xff01;十大回…

Python专为开发和部署数据驱动的应用程序库之taipy使用详解

概要 Taipy 是一个强大的 Python 库,专为开发和部署数据驱动的应用程序而设计。它通过提供一套丰富的工具和组件,使开发者能够快速构建和维护复杂的业务逻辑和数据交互界面。无论是金融分析、供应链管理还是任何需要高度数据交互的应用,taipy 都能提供高效的解决方案。 安装…

Orange AIpro开箱上手

0.介绍 首先感谢官方给到机会&#xff0c;有幸参加这次活动。 OrangePi AIpro(8T)采用昇腾AI技术路线&#xff0c;具体为4核64位处理器AI处理器&#xff0c;集成图形处理器&#xff0c;支持8TOPS AI算力&#xff0c;拥有8GB/16GB LPDDR4X&#xff0c;可以外接32GB/64GB/128GB/2…