找回密码
 立即注册
查看: 354|回复: 0

[脚本] unity获取button的长按,双击 button类扩展

[复制链接]
发表于 2022-1-18 15:55 | 显示全部楼层 |阅读模式
  1. using UnityEngine;
  2. using UnityEngine.UI;
  3. using UnityEngine.EventSystems;

  4. /// <summary>
  5. /// 我的自定义Button,继承 Button
  6. /// </summary>
  7. public class ExtraButton : Button
  8. {
  9.    // 构造函数
  10.     protected ExtraButton()
  11.     {
  12.         doubleClickEvent = new ButtonClickedEvent();
  13.         longPressEvent = new ButtonClickedEvent();
  14.     }

  15.     // 双击
  16.     public ButtonClickedEvent doubleClickEvent;
  17.     public ButtonClickedEvent onDoubleClick
  18.     {
  19.         get { return doubleClickEvent; }
  20.         set { doubleClickEvent = value; }
  21.     }
  22.     // 长按
  23.     public ButtonClickedEvent longPressEvent;
  24.     public ButtonClickedEvent onLongPress
  25.     {
  26.         get { return longPressEvent; }
  27.         set { longPressEvent = value; }
  28.     }


  29.     // 长按需要的变量参数
  30.     private bool my_isStartPress = false;
  31.     private float my_curPointDownTime = 0f;
  32.     private float my_longPressTime = 0.6f;
  33.     private bool my_longPressTrigger = false;
  34.   

  35.     void Update()
  36.     {
  37.         CheckIsLongPress();
  38.     }

  39.     #region 长按

  40.     /// <summary>
  41.     /// 处理长按
  42.     /// </summary>
  43.     void CheckIsLongPress() {
  44.         if (my_isStartPress && !my_longPressTrigger)
  45.         {
  46.             if (Time.time > my_curPointDownTime + my_longPressTime)
  47.             {
  48.                 my_longPressTrigger = true;
  49.                 my_isStartPress = false;
  50.                 if (longPressEvent != null)
  51.                 {
  52.                     longPressEvent.Invoke();
  53.                 }
  54.             }
  55.         }
  56.     }

  57.     public override void OnPointerDown(PointerEventData eventData)
  58.     {
  59.         // 按下刷新當前時間
  60.         base.OnPointerDown(eventData);
  61.         my_curPointDownTime = Time.time;
  62.         my_isStartPress = true;
  63.         my_longPressTrigger = false;
  64.     }

  65.     public override void OnPointerUp(PointerEventData eventData)
  66.     {
  67.         // 指針擡起,結束開始長按
  68.         base.OnPointerUp(eventData);
  69.         my_isStartPress = false;
  70.         
  71.     }

  72.     public override void OnPointerExit(PointerEventData eventData)
  73.     {
  74.         // 指針移出,結束開始長按,計時長按標志
  75.         base.OnPointerExit(eventData);
  76.         my_isStartPress = false;
  77.       
  78.     }

  79.     #endregion

  80.     #region 双击(单击)

  81.     public override void OnPointerClick(PointerEventData eventData)
  82.     {
  83.         //(避免已經點擊進入長按后,擡起的情況)
  84.         if (!my_longPressTrigger)
  85.         {
  86.             Debug.Log("eventData.clickCount"+eventData.clickCount);
  87.             // 正常單擊
  88.             if (eventData.clickCount == 2 )
  89.             {
  90.               
  91.                 if (doubleClickEvent != null)
  92.                 {
  93.                     doubleClickEvent.Invoke();
  94.                 }
  95.                
  96.             }// 雙擊
  97.             else if (eventData.clickCount == 1)
  98.             {
  99.                 onClick.Invoke();
  100.             }
  101.         }
  102.     }
  103.     #endregion


  104. }
复制代码
替换原有的Button组件,如果在lua中,直接用
  1. self.objBtnSpin:GetComponent("ExtraButton").onClick:AddListener(
  2.             function()
  3.                 print("onClick")
  4.             end
  5.     )
  6.     self.objBtnSpin:GetComponent("ExtraButton").onLongPress:AddListener(
  7.             function()
  8.                 print("OnLongPress")
  9.             end
  10.     )
  11.     self.objBtnSpin:GetComponent("ExtraButton").onDoubleClick:AddListener(
  12.             function()
  13.                 print("onDoubleClick")
  14.             end
  15.     )
复制代码
参考链接:https://blog.csdn.net/u014361280/article/details/107603869
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-5-3 01:48 , Processed in 0.087691 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表