首页 > 其他分享 >关于使用自定义按键的探索和实现

关于使用自定义按键的探索和实现

时间:2024-07-15 19:30:18浏览次数:11  
标签:自定义 探索 FKey OnKeyDown Key 按键 OnKeyUp

目前游戏中大都支持自定义按键,在设置页面中,为了给玩家一个舒适或者更有空间的操作方式,我对在ue4中自定义按键输入的实现进行探索,当然ue4和ue5版本差别不大可以说大同小异。

对于自定义按键,比如玩家开枪,跳跃翻滚,本来使用q ,w e,来完成,但是我们在设置中可以改变他的按键,所以初步实现需要一个功能,那就是检测按键按下的函数,UE封装过于笨重,但是我们可以知道

key的事件处理是在PlayerController中完成的,也就是说,我们找到PlayerController,找到这个函数就可以,不想界面那边有现成的,PlayerController没有直接提供,需要从c++层面进行修改,

怎么修改呢,找到他的定义能发现一个函数:

virutal bool InputKey(FKey Key, EInputEvent EventType, float AmountDepressed, bool bGamepad);

这个函数对他重写一下,然后声明两个函数OnKeyDown和OnKeyUp,具体如下:

 UFUNCTION(BlueprintImplementableEvent)
 void OnKeyDown(FKey Key);
 void OnKeyDown_Implementable(FKey Key);

  UFUNCTION(BlueprintImplementableEvent)
 void OnKeyUp(FKey Key);
 void OnKeyUp_Implementable(FKey Key);

至于上面的InputKey如何重写呢,代码如下:

  if (!Key.IsMouseButton() )
  {
      if (EventType == IE_Pressed)
      {
          OnKeyDown(Key);
      }
      else {
          OnKeyUp(Key);

      }
  }
  return Super::InputKey(Key,EventType,AmountDepressed,bGamepad);

然后编译,在虚幻编辑器中,新建一个结构体 ST EventTable,有Key和EventName

第一个是按键,第二个是事件所对应的值,可以是字符串或者枚举

然后我们在PlayerController中建立一个该类型的数组,

然后再OnKeyDown和OnKeyUp中遍历该数值,找到对应的Key所对应的Event,然后进行处理。蓝图代码如下:

 CallEvent中分别处理对应的事件,如果是枚举类型,那么直接switch来对应,如果是字符串,那么要比较: 比如EventAction等于Jump,然后我们调用Jump函数,如果EventAction是翻滚,那么调用翻滚函数。

功能还需要支持设置界面中的Key更换,原理简单,找到对应的EventName,改Key,数组中有该Key的置为空即可,防止重复。

 

标签:自定义,探索,FKey,OnKeyDown,Key,按键,OnKeyUp
From: https://www.cnblogs.com/yang131/p/18303845

相关文章

  • VTK-自定义交互器、可拖拽坐标轴、视图定向立方体
    源代码:https://github.com/qianqiu10000/mySWInteractorStyle1.0.git仿照SolidWorks的操作习惯自定义的VTK交互器:1.左键单击Actor,可以选择Actor,并显示红色2.左键双击Actor,可以在Actor位置弹出拖拽坐标轴,可以移动、旋转3.单击空格键,可以弹出立方体视图定向工具4.按住鼠标......
  • 星贝之光:探索儿童孤独症谱系障碍的个性化治疗之旅
        在星贝育园自闭症康复中心,作为一位专注于自闭症谱系障碍(ASD)儿童教育与康复的老师,我深知每一个走进我们怀抱的孩子都是独一无二的星星,他们拥有着等待我们去发现和点亮的光芒。面对儿童孤独症谱系障碍的治疗,我们秉持着科学与爱心并重的原则,为孩子们量身定制综合治疗方......
  • 【笔记】Nmap工具原理探索
    【笔记】Nmap工具原理探索原文章:【THM】Nmap(Nmap工具使用简介)-学习-Hekeatsll-博客园(cnblogs.com)Nmap是一款跨平台的开源端口扫描软件,它用来扫描计算机的开放端口,以确定运行的网络服务,并推断出计算机运行的操作系统Nmap三种基本扫描类型TCP连接扫描(-sT)工作原理:通过......
  • 深入探索 Vue 3 组合式 API:高效管理响应式状态与跨组件通信
    随着Vue3的发布,组合式API(CompositionAPI)引入了更灵活、更强大的状态管理和逻辑复用方式。本文将深入探讨如何使用组合式API管理响应式状态和实现跨组件通信,并通过具体的代码示例展示其应用场景。一、组合式API简介组合式API是Vue3中的一种新的API风格,它通过......
  • Microsoft Office 自定义安装部署工具 | Mocreak
    软件简介:Mocreak是一款一键自动化下载、安装、部署正版Office的办公增强工具。该工具完全免费、无广告、绿色、无毒、简约、高效、安全。软件特点:一键快速下载、安装、部署最新版MicrosoftOffice软件。提供简约、高效,且可自定义的图形界面,提升部署效率。支持将Office安......
  • 自定义拦截器
    第一步:创建的first类去实现 HandlerInterceptor  按需重写里面的  preHandle(预处理)、postHandle(执行前也叫前置拦截器)、afterCompletion(渲染之后执行任务之前)方法第二步:创建好first类不代表拦截器生效了要去写个配置类去配置它。创建second类去实现WebM......
  • ros2,功能包下使用自定义的msg,msg文件在定义在当前文件下
    1.创建功能包,参考ros官方方式Writingasimplepublisherandsubscriber(C++)—ROS2Documentation:Humbledocumentationros2pkgcreate--build-typeament_cmake--licenseApache-2.0cpp_pubsub2.创建msg在cpp_pubsub功能包下创建msg文件夹 ros2_ws/cpp_pubsub......
  • 探索GraphRAG:构建高效的知识图谱索引与查询引擎
    GraphRAG系统简介GraphRAG是一个基于图的检索增强生成系统,它通过索引文本数据,然后使用这些索引数据来回答有关文档的问题。系统的核心在于其索引管道和查询引擎,它们共同工作,以提供快速且准确的信息检索服务。环境准备在开始之前,请确保你的开发环境中已安装Python3.10至3......
  • 探索 GraphRAG:图结构与生成式模型的融合
    在当今数据驱动的时代,处理和理解复杂的图结构数据成为了一项重要的任务。GraphRAG(GraphRetrieval-AugmentedGeneration)作为一种新兴的技术,为解决图相关的问题提供了创新的思路和方法。一、GraphRAG简介GraphRAG是一种结合了图结构数据和生成式模型的技术框架。它旨在......
  • 探索Eureka的高级用法:在服务中实现分布式锁
    探索Eureka的高级用法:在服务中实现分布式锁在微服务架构中,随着服务数量的增加和部署的扩展,保证服务间操作的原子性和一致性变得尤为重要。分布式锁作为一种关键技术,能够确保跨多个服务实例的同步访问。Eureka,作为Netflix开源的服务发现框架,提供了服务注册与发现的功能,但如......