当前位置: 首页 > news >正文

UE5C++学习(一)--- 增强输入系统

一、关于增强输入系统的介绍

增强输入系统官方文档介绍

二、增强输入系统的具体使用

注:在使用方面,不会介绍如何创建项目等基础操作,如果还没有UE的使用基础,可以参考一下我之前UE4的文章,操作差别不会很大。

如上图所示,在自己创建好的项目工程中,找到.Build.cs文件,在添加的模块引用中,添加EnhancedInput模块,添加这个模块之后,才能在写完增强输入系统的代码后正确运行。

代码:

//输入映射
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Input", meta = (AllowPrivateAccess = "true"))class UInputMappingContext* DefaultMappingContext;
//移动
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Input", meta = (AllowPrivateAccess = "true"))class UInputAction* MoveAction;
//上下左右看
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Input", meta = (AllowPrivateAccess = "true"))class UInputAction* LookAction;

在我们创建完成的角色类中添加必要的组件,比如摄像机臂组件和摄像机组件。UInputMappingContext是用来引用操作上下文,而UInputAction对应某个具体的操作,比如我们的WASD前后左右移动,鼠标轴挥动去上下左右看,当我们的Action创建完成之后,去放到操作上下文中去映射,这个时候我们的输入便被绑定到角色中。

代码:

UEnhancedInputComponent* EnhancedInputComponent = CastChecked<UEnhancedInputComponent>(PlayerInputComponent);
if (EnhancedInputComponent && MoveAction && LookAction)
{EnhancedInputComponent->BindAction(MoveAction, ETriggerEvent::Triggered,this,&ASCharacter::Move);EnhancedInputComponent->BindAction(LookAction, ETriggerEvent::Triggered, this, &ASCharacter::Look);}

在角色输入绑定函数中,用增强输入组件去绑定Action,之后输入操作按键便会执行对应的操作。

对于ETriggerEvent,在引擎源代码中有相应的介绍,有按键按下,一直按住,松开时的处理,会比UE4的输入更加详细。

在Move和Look的函数中,处理角色移动和上下左右看。

Move代码:

    FVector2D MovementVector = Value.Get<FVector2D>();if (Controller){const FRotator ControlRotation = Controller->GetControlRotation();const FRotator YawRotation = FRotator(0.0f,ControlRotation.Yaw,0.0f);const FVector ForawrdDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X);const FVector RightDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y);AddMovementInput(ForawrdDirection,MovementVector.Y);AddMovementInput(RightDirection, MovementVector.X);}

Look代码:

    FVector2D LookVector = Value.Get<FVector2D>();if (Controller){AddControllerYawInput(LookVector.X);AddControllerPitchInput(LookVector.Y);}

以上处理完成之后,需要在游戏运行的时候,添加增强输入系统的映射。

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

这个时候,回到引擎中,去创建一个输入映射和move、look的Action。

在移动和上下左右看的Action中,添加需要操作的按键。

MappingContext中绑定,注意方向输入:

注意在角色蓝图中去选择创建的输入和映射。

相关文章:

  • MYSQL:索引与锁表范围简述
  • Python 解压静态库 .a 和 .lib 文件
  • 【蓝桥杯】2023省赛H题
  • springboot前后端时间类型传输
  • Ansible的role
  • 0基础学习PyFlink——使用datagen生成流式数据
  • 【架构图解】API架构图解:如何以图表形式展现复杂系统
  • XPATH 注入漏洞
  • 数据可视化:动态柱状图
  • 关于SNAP的Biophysical Processor模块的计算准确率以及大厂10月种植情况
  • 网络安全进阶学习第二十一课——XXE
  • Docker数据卷使用过程中想到的几个问题
  • linux下使用vscode对C++项目进行编译
  • vue的rules验证失效,部分可以部分又失效的原因
  • Linux之管道
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • Angular Elements 及其运作原理
  • CSS相对定位
  • Go 语言编译器的 //go: 详解
  • in typeof instanceof ===这些运算符有什么作用
  • Java编程基础24——递归练习
  • Js基础知识(一) - 变量
  • leetcode386. Lexicographical Numbers
  • mongo索引构建
  • ng6--错误信息小结(持续更新)
  • PHP那些事儿
  • Python实现BT种子转化为磁力链接【实战】
  • spring boot 整合mybatis 无法输出sql的问题
  • Vue.js源码(2):初探List Rendering
  • vue总结
  • 创建一种深思熟虑的文化
  • 回流、重绘及其优化
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 深入浅出webpack学习(1)--核心概念
  • 十年未变!安全,谁之责?(下)
  • 首页查询功能的一次实现过程
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • ​TypeScript都不会用,也敢说会前端?
  • ​你们这样子,耽误我的工作进度怎么办?
  • # 计算机视觉入门
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • %@ page import=%的用法
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (七)c52学习之旅-中断
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (转)可以带来幸福的一本书
  • (转)我也是一只IT小小鸟
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET 服务 ServiceController
  • .net 使用ajax控件后如何调用前端脚本
  • .net2005怎么读string形的xml,不是xml文件。
  • .net程序集学习心得