关闭

Unity uGUI 长按事件

标签: unity控件
6027人阅读 评论(0) 收藏 举报
分类:

在Unity 4.6新增的uGUI中,可以方便地对控件,通过添加EventTrigger脚本来进行添加事件。但是里面并没有包括长按事件,需要自己来实现长按事件。

长按事件

以下是一种实现方式,来自《Handling long press events in uGUI (Unity 4.6)

using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;

public class LongPressEventTrigger : UIBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerExitHandler
{
    [Tooltip("How long must pointer be down on this object to trigger a long press")]
    public float durationThreshold = 1.0f;

    public UnityEvent onLongPress = new UnityEvent();

    private bool isPointerDown = false;
    private bool longPressTriggered = false;
    private float timePressStarted;

    private void Update()
    {
        if (isPointerDown && !longPressTriggered)
        {
            if (Time.time - timePressStarted > durationThreshold)
            {
                longPressTriggered = true;
                onLongPress.Invoke();
            }
        }
    }

    public void OnPointerDown(PointerEventData eventData)
    {
        timePressStarted = Time.time;
        isPointerDown = true;
        longPressTriggered = false;
    }

    public void OnPointerUp(PointerEventData eventData)
    {
        isPointerDown = false;
    }

    public void OnPointerExit(PointerEventData eventData)
    {
        isPointerDown = false;
    }
}

长按或点击事件

当存在长按事件,又想存在点击事件时,那么就需要判断是否已经执行了长按事件,已经执行了就不能再执行点击事件了,代码如下:

using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;

public class LongPressOrClickEventTrigger : UIBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerExitHandler, IPointerClickHandler
{
    [Tooltip("How long must pointer be down on this object to trigger a long press")]
    public float durationThreshold = 1.0f;

    public UnityEvent onLongPress = new UnityEvent();
    public UnityEvent onClick = new UnityEvent();

    private bool isPointerDown = false;
    private bool longPressTriggered = false;
    private float timePressStarted;

    private void Update()
    {
        if (isPointerDown && !longPressTriggered)
        {
            if (Time.time - timePressStarted > durationThreshold)
            {
                longPressTriggered = true;
                onLongPress.Invoke();
            }
        }
    }

    public void OnPointerDown(PointerEventData eventData)
    {
        timePressStarted = Time.time;
        isPointerDown = true;
        longPressTriggered = false;
    }

    public void OnPointerUp(PointerEventData eventData)
    {
        isPointerDown = false;
    }

    public void OnPointerExit(PointerEventData eventData)
    {
        isPointerDown = false;
    }

    public void OnPointerClick(PointerEventData eventData)
    {
        if (!longPressTriggered)
        {
            onClick.Invoke();
        }
    }
}
1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

[Unity UGUI]点击和长按组件

需求游戏项目中卡片经常需要按钮/卡片的点击或者长按事件,这里提供一个好用的组件。 组件using UnityEngine; using UnityEngine.Events; using UnityE...
  • s10141303
  • s10141303
  • 2017-06-02 15:59
  • 1820

unity3d中的长按事件

unity3d中的长按事件我们是可以通过键盘来实现的。,具体过程我们看一下下面。 监听键盘中某个按键是否一直处于被按下的状态,使用Input.GetKey()方法来判断。 #region 长按...
  • miaoman001
  • miaoman001
  • 2015-02-01 14:39
  • 1353

Unity事件系统实现长按

  • 2017-07-10 09:10
  • 11KB
  • 下载

Unity事件系统实现uGUI Button长按

还在用Update计时器实现各种流程控制和状态判断吗?今次介绍一下使用UnityEvents实现uGUI的长按状态检测。效果案例是我们常见的微信长按弹出菜单。 使用事件,首先需要添加引用。 usi...
  • mseol
  • mseol
  • 2017-07-10 09:09
  • 924

Unity自定义UI组件(四)双击按钮、长按按钮

Unity中实现按钮双击、长击按钮,特点方便创建,容易监听,像UGUI提供的Button一样便捷,并且在不同的工程之间可以完全复用。
  • qq_29579137
  • qq_29579137
  • 2017-05-31 18:49
  • 1726

Unity教程之-对UGUI长按事件的实现

在使用UGUI过程中,有时我们想长按钮按,执行某个功能,但UGUI只有简单的单击功能,下面我们来看下UGUI长按事件的实现,贴上代码 using UnityEngine; using System....
  • andyhebear
  • andyhebear
  • 2016-01-08 11:22
  • 2054

【UGUI】Unity的UGUI实现Button按钮长按状态的判断

using UnityEngine; using UnityEngine.EventSystems; using System.Collections; /// /// 脚本位置:UGUI按钮组件身...
  • sinat_20559947
  • sinat_20559947
  • 2015-11-17 13:50
  • 14952

UGUI 实现Button长按效果(RepeatButton)

  • 2015-06-10 23:24
  • 161KB
  • 下载

【UGUI】Unity的UGUI实现Button按钮长按状态的判断

本文转载至室友龙龙哥哥 地址:http://blog.csdn.net/sinat_20559947/article/details/49886557 using UnityEngine; usi...
  • ldy597321444
  • ldy597321444
  • 2016-08-03 15:58
  • 3309

Unity3d使用UGUI实现长按功能

http://www.taikr.com/article/182 怎样才能完成Unity3d使用UGUI实现长按功能呢?可能许多人也不是很清楚,现在我们就来看一下。    ...
  • ybhjx
  • ybhjx
  • 2017-03-28 18:09
  • 246
    个人资料
    • 访问:3499045次
    • 积分:35794
    • 等级:
    • 排名:第138名
    • 原创:400篇
    • 转载:88篇
    • 译文:5篇
    • 评论:3419条
    个人说明
    联系方式:
    文章存档
    最新评论