热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

解决UnrealEngine中UMG按钮长时间按住自动释放的问题

本文探讨了在UnrealEngine中使用UMG按钮时,长时间按住按钮会导致自动释放的问题,并提供了详细的解决方案。

本文将详细介绍在Unreal Engine中使用UMG按钮时,长时间按住按钮会导致自动释放的问题及其解决方法。希望对您有所帮助。




在Unreal Engine 4.26.2版本中,使用UMG按钮时,如果在项目设置中的输入部分设置了bUseMouseForTouch=True,可能会遇到一个奇怪的现象:鼠标模拟按住按钮触发事件后,会在一段时间后自动调用释放按钮的操作。


问题描述

当在项目设置中启用鼠标模拟触摸功能时,UMG按钮在被长时间按住后会自动释放。这一问题在某些场景下可能导致用户体验不佳,需要进行处理。


问题原因

该问题的根本原因是Unreal Engine的内部机制。具体来说,FSlateApplication类中的TickPlatform函数会定期调用GenerateGestures方法来生成模拟的手势事件。在GenerateGestures方法中,有一个长按手势检测逻辑,当检测到长按时会触发释放按钮的操作。


以下是相关代码片段:

void FSlateApplication::TickPlatform(float DeltaTime) {     // 其他代码     ForEachUser([this](FSlateUser& User) {         User.GetGestureDetector().GenerateGestures(*this, SimulateGestures);     }); }

在GenerateGestures方法中:

void FGestureDetector::GenerateGestures(FGenericApplicationMessageHandler& MessageHandler, const TBitArray& EnabledGestures) {     if (EnabledGestures[(uint8)EGestureEvent::LongPress]) {         const double CurrentTime = FPlatformTime::Seconds();         for (int32 TouchIndex = 0; TouchIndex = FGestureDetector::LongPressSeconds) {                     MessageHandler.OnTouchGesture(EGestureEvent::LongPress, FVector2D(0, 0), 0, false);                     LongPressTrack[TouchIndex].Reset();                 }             }         }     } }

长按时间默认为0.8秒,这是硬编码在引擎中的。


解决方法

由于修改引擎源码较为复杂且不推荐,我们可以采用一种简单的方法来解决这个问题:取消按钮的焦点捕获功能。具体步骤如下:

  1. 打开UMG按钮的属性面板。
  2. 找到“交互”选项卡。
  3. 取消勾选“可聚焦”(Is Focusable)选项。

通过这种方式,按钮将不会响应长按手势,从而避免自动释放的问题。


参考链接

如果您想了解更多关于此问题的信息,可以参考以下链接:
https://answers.unrealengine.com/questions/278238/long-press-buttons-in-umg.html


推荐阅读
  • 在维护公司项目时,发现按下手机的某个物理按键后会激活相应的服务,并在屏幕上模拟点击特定坐标点。本文详细介绍了如何使用ADB Shell Input命令来模拟各种输入事件,包括滑动、按键和点击等。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • python的交互模式怎么输出名文汉字[python常见问题]
    在命令行模式下敲命令python,就看到类似如下的一堆文本输出,然后就进入到Python交互模式,它的提示符是>>>,此时我们可以使用print() ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 本文详细介绍了Linux系统中init进程的作用及其启动过程,解释了运行级别的概念,并提供了调整服务启动顺序的具体步骤和实例。通过了解这些内容,用户可以更好地管理系统的启动流程和服务配置。 ... [详细]
author-avatar
福田商务汽车-日照方傲
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有