热门标签 | 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


推荐阅读
  • This post discusses an issue encountered while using the @name annotation in documentation generation, specifically regarding nested class processing and unexpected output. ... [详细]
  • 丽江客栈选择问题
    本文介绍了一道经典的算法题,题目涉及在丽江河边的n家特色客栈中选择住宿方案。两位游客希望住在色调相同的两家客栈,并在晚上选择一家最低消费不超过p元的咖啡店小聚。我们将详细探讨如何计算满足条件的住宿方案总数。 ... [详细]
  • 本教程详细介绍了如何使用 TensorFlow 2.0 构建和训练多层感知机(MLP)网络,涵盖回归和分类任务。通过具体示例和代码实现,帮助初学者快速掌握 TensorFlow 的核心概念和操作。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • 本文详细介绍了如何在Android 4.4及以上版本中配置WebView以实现内容的自动高度调整和屏幕适配,确保中文显示正常,并提供代码示例。 ... [详细]
  • 主调|大侠_重温C++ ... [详细]
  • 本文详细介绍了如何使用 HTML 和 CSS 对文件上传按钮进行样式美化,使用户界面更加友好和美观。 ... [详细]
  • 软件工程课堂测试2
    要做一个简单的保存网页界面,首先用jsp写出保存界面,本次界面比较简单,首先是三个提示语,后面是三个输入框,然 ... [详细]
  • 本文旨在探讨如何利用决策树算法实现对男女性别的分类。通过引入信息熵和信息增益的概念,结合具体的数据集,详细介绍了决策树的构建过程,并展示了其在实际应用中的效果。 ... [详细]
  • 本文介绍了如何在iOS应用中自定义导航栏按钮,包括使用普通按钮和图片生成导航条专用按钮的方法。同时,探讨了在不同版本的iOS系统中实现多按钮布局的技术方案。 ... [详细]
  • 当unique验证运到图片上传时
    2019独角兽企业重金招聘Python工程师标准model:public$imageFile;publicfunctionrules(){return[[[na ... [详细]
  • springMVC JRS303验证 ... [详细]
  • 本文详细介绍了ASP.NET缓存的基本概念和使用方法,包括输出缓存、数据缓存及其高级特性,如缓存依赖、自定义缓存和缓存配置文件等。通过合理利用这些缓存技术,可以显著提升Web应用程序的性能。 ... [详细]
  • 本文介绍如何在Ubuntu操作系统中为DELL Latitude系列笔记本配置触摸板的自定义快捷键。此方法不仅适用于DELL品牌,其他品牌的笔记本也可能适用。通过编写简单的脚本,用户可以实现触摸板的快速开关。 ... [详细]
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社区 版权所有