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


推荐阅读
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社区 版权所有