查看: 1910|回复: 0
打印 上一主题 下一主题

[其他] 对uGUI长按事件的改进

[复制链接]

2317

主题

54

听众

2万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
20645
精华
62

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2015-10-13 07:21:45 |只看该作者 |倒序浏览
突然发现之前写的按钮长按在两个长按按钮重叠的时候会出现问题,具体情况是按了一个按钮会执行两个按钮的事件,不重叠则没有些问题。对于这个问题,根本原因是长按的时候按的是哪一个按钮,对此修改脚本以解决该问题。
  1. using UnityEngine;
  2. using System.Collections;
  3. using UnityEngine.Events;
  4. using UnityEngine.EventSystems;
  5. using UnityEngine.UI;

  6. [AddComponentMenu("UI/LongPressButton")]
  7. public class UILongPressButton : Selectable, IPointerDownHandler,IPointerExitHandler,IPointerUpHandler
  8. {
  9.         [SerializeField]
  10.         UnityEvent m_onLongPress = new UnityEvent();
  11.        
  12.         float interval = 0.1f;
  13.         float longPressDelay = 0.5f;
  14.        
  15.         private bool isTouchDown = false;
  16.         private bool isLongpress = false;
  17.         private float touchBegin = 0;
  18.         private float lastInvokeTime = 0;
  19.        
  20.         // Update is called once per frame
  21.         void Update ()
  22.         {
  23.                 if (isTouchDown && IsPressed() && interactable)
  24.                 {
  25.                         if (isLongpress)
  26.                         {
  27.                                 if (Time.time - lastInvokeTime > interval)
  28.                                 {
  29.                                         m_onLongPress.Invoke();
  30.                                         lastInvokeTime = Time.time;
  31.                                 }
  32.                         }
  33.                         else
  34.                         {
  35.                                 isLongpress = Time.time - touchBegin > longPressDelay;
  36.                         }
  37.                 }
  38.         }
  39.        
  40.         public void OnPointerDown(PointerEventData eventData)
  41.         {
  42.                 base.OnPointerDown(eventData);
  43.                 touchBegin = Time.time;
  44.                 isTouchDown = true;
  45.         }
  46.        
  47.         public void OnPointerExit(PointerEventData eventData)
  48.         {
  49.                 base.OnPointerExit(eventData);
  50.                 isTouchDown = false;
  51.                 isLongpress = false;
  52.         }
  53.        
  54.         public void OnPointerUp(PointerEventData eventData)
  55.         {
  56.                 base.OnPointerUp(eventData);
  57.                 isTouchDown = false;
  58.                 isLongpress = false;
  59.         }
  60. }
复制代码
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-17 18:39 , Processed in 0.280160 second(s), 29 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部