31. UE5 RPG使用增强输入激活GameplayAbility(一)

在前面文章中,我们实现了对技能添加并直接激活功能,介绍了GA的相关参数配置。现在,我们还不能通过键位触发技能,正常在游戏时,我们需要通过键位触发技能,实现技能的激活。
在UE5里面添加了增强输入,相对于之前的输入操作,切换为了模块化,我们可以通过切换输入上下文,来实现键位输入和InputAction的映射,你可以创建多个上下文蓝图,在角色不同操作时,切换不同的上下文来实现不同的映射,比如,在正常情况下,有一套控制任务的上下文,当角色进入汽车后,我们可以停止当前的上下文,并改为使用汽车操作上下文去实现。
我们将使用UE的游戏案例Lyra实现的简化版,可以根据输入决定如何激活技能,并且通过数据驱动,在运行时也可以修改输入映射。
接下来,我们将实现通过增强输入去激活GA,首先创建一个DataAsset,将Tag和InputAction绑定起来,然后自定义增强输入的管理器,增加自定义的绑定操作函数用于绑定,接着在PlayerController里面,实现对输入事件的绑定。

创建DataAsset

首先创建一个基于DataAsset的类
在这里插入图片描述
放置到一个Input目录中
在这里插入图片描述
关闭UE,让编辑器编译完成。首先创建一个结构体,作为数据资产的结构,里面需要设置GamplayTag和其对应的InputAction,并设置为蓝图的类型

USTRUCT(BlueprintType)
struct FInputActionStruct
{GENERATED_BODY()UPROPERTY(EditDefaultsOnly)const class UInputAction* InputAction = nullptr;UPROPERTY(EditDefaultsOnly)FGameplayTag InputTag = FGameplayTag();
};

接着创建一个数组变量,用于存储当前数据的列表,后面我们需要在面板上面去添加数据。

public:UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)TArray<FInputActionStruct> AbilityInputActions;

增加一个函数,可以通过Tag去获取对应的InputAction的函数

	const UInputAction* FindAbilityInputActionForTag(const FGameplayTag& InputTag, bool bLogNotFound = false) const;

在函数实现方面,遍历整个数组,比对Tag,来获取到对应的InputAction并返回,如果发现获取不到的情况,我们可以将bLogNotFound设置为true,来查看那些Data设置的有问题。

const UInputAction* UInputConfig::FindAbilityInputActionForTag(const FGameplayTag& InputTag, bool bLogNotFound) const
{for(const FInputActionStruct& Action : AbilityInputActions){if(Action.InputAction && Action.InputTag == InputTag){return Action.InputAction;}}if(bLogNotFound){UE_LOG(LogTemp, Error, TEXT("无法从InputConfig[%s]中找到InputTag[%s]对应的技能InputAction"), *GetNameSafe(this), *InputTag.ToString());}return nullptr;
}

添加Tag

DataAsset需要Tag和InputAction,我们先把需要Tag添加上。
打开MyGameplayTags类,之前我们添加过属性的Tag,在下面接着添加InputAction的,这里添加鼠标键和数字键的Tag

	FGameplayTag InputTag_LMB; //鼠标左键FGameplayTag InputTag_RMB; //鼠标右键FGameplayTag InputTag_1; //1键FGameplayTag InputTag_2; //2键FGameplayTag InputTag_3; //3键FGameplayTag InputTag_4; //4键

由于注册的代码太差,我将属性和InputAction的Tag分成了两个函数去注册,下面是专门注册Input的函数

void FMyGameplayTags::InitializeInputGameplayTags()
{GameplayTags.InputTag_LMB = UGameplayTagsManager::Get().AddNativeGameplayTag(FName("Attributes.InputTag.LMB"),FString("鼠标左键"));GameplayTags.InputTag_RMB = UGameplayTagsManager::Get().AddNativeGameplayTag(FName("Attributes.InputTag.RMB"),FString("鼠标右键"));GameplayTags.InputTag_1 = UGameplayTagsManager::Get().AddNativeGameplayTag(FName("Attributes.InputTag.1"),FString("键盘1键"));GameplayTags.InputTag_2 = UGameplayTagsManager::Get().AddNativeGameplayTag(FName("Attributes.InputTag.2"),FString("键盘2键"));GameplayTags.InputTag_3 = UGameplayTagsManager::Get().AddNativeGameplayTag(FName("Attributes.InputTag.3"),FString("键盘3键"));GameplayTags.InputTag_4 = UGameplayTagsManager::Get().AddNativeGameplayTag(FName("Attributes.InputTag.4"),FString("键盘4键"));
}

然后在初始化里面调用

void FMyGameplayTags::InitializeNativeGameplayTags()
{InitializeAttributeGameplayTags();InitializeInputGameplayTags();
}

编译打开UE,查看是否Tag注册成功
在这里插入图片描述

创建InputAction

我们之前创建过移动的InputAction用于移动操作
在这里插入图片描述
接着在此文件夹创建按键所需的InputAction
在这里插入图片描述
命名为IA_LMB,IA_是InputAction的推荐命名,将内部的值类型修改为浮点类型
在这里插入图片描述
接着将其它的InputAction都创建出来,进行同样的设置
在这里插入图片描述
创建完成InputAction,这只是单纯的InputAction,不添加到输入映射的上下文中,它是无法起作用的,接下来,我们添加到之前移动使用的上下文中。
这里有个小细节,我们绑定对应键位时,可以鼠标左键点击一下键盘图标,然后接着点击需要绑定的键位,就可以设置上。设置完成,在应用这个输入映射上下文时,对应键位的InputAction将会触发事件。
在这里插入图片描述
创建DataAsset的数据都有了,我们就可以创建数据列表了。

填充DataAsset

创建一个数据资产
在这里插入图片描述
选择InputConfig类
在这里插入图片描述
打开,我们需要将两项内容对应填充
在这里插入图片描述
数据创建完成
在这里插入图片描述

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

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

相关文章

AcWing 786. 第k个数——算法基础课题解

AcWing 786. 第k个数 题目描述 给定一个长度为 n的整数数列&#xff0c;以及一个整数 k&#xff0c;请用快速选择算法求出数列从小到大排序后的第 k 个数。 输入格式 第一行包含两个整数 n 和 k。 第二行包含 n 个整数&#xff08;所有整数均在 1∼10^9 范围内&#xff09…

Linux制作C++静态库和动态库并使用示例

创建动态库&#xff1a; 编写源文件&#xff1a; // sub.h 显式调用 #include <iostream>extern "C" int sub(int a, int b);// sub.cpp #include "sub.h"int sub(int a, int b) {return a - b; }// quadrature.h 隐式调用 #include <iostream&…

使用MySQL和PHP创建一个公告板

目录 一、创建表 二、制作首页&#xff08;创建主题以及显示列表&#xff09; 三、制作各个主题的页面&#xff08;输入回帖和显示列表&#xff09; 四、制作消息的查询界面 五、制作读取数据库信息的原始文件 六、制作数据重置页面 七、效果图 八、问题 1、目前无法处…

FME教程:以根据自然幢给宗地红线在相交处添加节点为例,介绍图斑在公共边相交处加节点的实现方法,宗地红线批量加节点,图斑自动加界址点

目录 一、实现效果 二、实现过程 1.读取数据 2.提取自然幢的坐标节点 3.根据自然幢节点&#xff0c;给宗地红线添加节点 4.重构宗地红线面 5.输出成果 6.模板的使用 三、总结 今天以根据自然幢给宗地红线在相交处添加节点为例&#xff0c;介绍图斑在公共边相交处加…

C#学生信息管理系统

一、引言 学生信息管理系统是现代学校管理的重要组成部分&#xff0c;它能够有效地管理学生的基本信息、课程信息、成绩信息等&#xff0c;提高学校管理的效率和质量。本文将介绍如何使用SQL Server数据库和C#语言在.NET平台上开发一个学生信息管理系统的课程设计项目。 二、项…

【C++练级之路】【Lv.18】哈希表(哈希映射,光速查找的魔法)

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 引言一、哈希1.1 哈希概念1.2 哈希函数1.3 哈希冲突 二、闭散列2.1 数据类型2.2 成员变量2.3 默认成员函数2.…

2013年认证杯SPSSPRO杯数学建模A题(第二阶段)护岸框架全过程文档及程序

2013年认证杯SPSSPRO杯数学建模 A题 护岸框架 原题再现&#xff1a; 在江河中&#xff0c;堤岸、江心洲的迎水区域被水流长期冲刷侵蚀。在河道整治工程中&#xff0c;需要在受侵蚀严重的部位设置一些人工设施&#xff0c;以减弱水流的冲刷&#xff0c;促进该处泥沙的淤积&…

余集和拉格朗日定理

L&#xff1a;一个群的例子&#xff08;在下面的文章中进一步详细介绍&#xff09;;R&#xff1a;约瑟夫路易拉格朗日&#xff08;1736-1813&#xff09;&#xff0c; 一、说明 数学家总是痴迷于根据乍一看似乎完全无关的事实/观察来形成概括。为什么&#xff1f;原因很简单&am…

基于 Quartz.NET 可视化任务调度平台 QuartzUI

一、简介 QuartzUI 是基于 Quartz.NET3.0 的定时任务 Web 可视化管理&#xff0c;Docker 打包开箱即用、内置 SQLite 持久化、语言无关、业务代码零污染、支持 RESTful 风格接口、傻瓜式配置、异常请求邮件通知等。 二、部署 QuartzUI 从 2022 年到现在没有提交记录&#xf…

第十二篇【传奇开心果系列】Python自动化办公库技术点案例示例:深度解读Python自动化操作Word

传奇开心果系列博文 系列博文目录Python自动化办公库技术点案例示例系列 博文目录前言一、Python自动化操作Word介绍二、使用python-docx示例代码二、**使用win32com示例代码**三、使用comtypes示例代码四、使用docx-mailmerge示例代码五、基本操作示例代码六、高级操作示例代码…

计算机网络——32差错检测和纠正

差错检测和纠正 错误检测 EDC 差错检测和纠错位&#xff08;冗余位&#xff09; D 数据由差错检测保护&#xff0c;可以包含头部字段 错误检测不是100%可靠的 协议会泄露一些错误&#xff0c;但是很少更长的EDC字段可以得到更好的检测和纠正效果 奇偶校验 单bit奇偶校验 …

精品PPT-2023年无人驾驶汽车车联网网络安全方案

以下是部分PPT内容&#xff0c;请您参阅。如需下载完整PPTX文件&#xff0c;请前往星球获取&#xff1a; 无人驾驶安全架构是一个复杂的系统&#xff0c;它涉及到多个关键组件和层次&#xff0c;以确保无人驾驶车辆在各种情况下都能安全、可靠地运行。以下是一些主要的无人驾驶…

基于springboot+vue的高效学生实习管理系统【管理员、学院、教师、企业单位、学生】

【管理员】 【院系负责人】 【教师】 【企业单位】 【学生】

Android Glide配置AppGlideModule定制化线程池,Kotlin(1)

Android Glide配置AppGlideModule定制化线程池&#xff0c;Kotlin&#xff08;1&#xff09; plugins {id org.jetbrains.kotlin.kapt }implementation com.github.bumptech.glide:glide:4.16.0kapt com.github.bumptech.glide:compiler:4.16.0 import android.content.Context…

【爬虫开发】爬虫从0到1全知识md笔记第3篇:数据提取概要,知识点【附代码文档】

爬虫开发从0到1全知识教程完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;爬虫课程概要&#xff0c;爬虫基础爬虫概述,,http协议复习。requests模块&#xff0c;requests模块1. requests模块介绍,2. response响应对象,3. requests模块发送请求,4. request…

YOLO电动车检测识别数据集:12617张图像,yolo标注完整

YOLO电动车检测识别数据集&#xff1a;12617张图像&#xff0c;电动车一类&#xff0c;yolo标注完整&#xff0c;部分图像应用增强。 适用于CV项目&#xff0c;毕设&#xff0c;科研&#xff0c;实验等 需要此数据集或其他任何数据集请私信

即刻体验 | 使用 Flutter 3.19 更高效地开发

我们已隆重推出全新的 Flutter 版本——Flutter 3.19。此版本引入了专为 Gemini 设计的新 Dart SDK、一个能让开发者对 Widget 动画实现精细化控制的全新 Widget&#xff0c;Impeller 更新带来的渲染性能提升、有助于实现深层链接的工具和对 Windows Arm64 的支持&#xff0c;以…

全局统一返数据类型封装记录

全局统一返回值封装 ​ 在Spring Boot中&#xff0c;实现全局统一返回值封装是一种常见的做法&#xff0c;它有助于保持API的一致性&#xff0c;并简化前端对响应数据的处理。创建一个响应体类&#xff0c;包含状态码、消息、数据等字段。这个类可以作为所有控制器返回值的通用…

达梦配置ODBC连接

达梦配置ODBC连接 基础环境 操作系统&#xff1a;Red Hat Enterprise Linux Server release 7.9 (Maipo) 数据库版本&#xff1a;DM Database Server 64 V8 架构&#xff1a;单实例1 下载ODBC包 下载网址&#xff1a;https://www.unixodbc.org/ unixODBC-2.3.0.tar.gz2 编译并…

python-django物流仓储进销存配送管理系统flask_1ea2k

实现了一个完整的物流管理系统&#xff0c;其中主要有站点信息模块、物流进度模块、用户表模块、司机模块、入库信息模块、签收信息模块、类型模块、快递信息模块、客户模块、客服模块、公告信息模块、服务类型模块、配置文件模块、出库信息模块、车辆信息模块、仓管模块、账户…