Unity3D UI 双击和长按

Unity3D 实现 UI 元素双击和长按功能。

UI 双击和长按

上一篇文章实现了拖拽接口,这篇文章来实现 UI 的双击和长按。

双击

创建脚本 UIDoubleClick.cs,创建一个 Image,并把脚本挂载到它身上。

在脚本中,继承 IPointerClickHandler 接口,实现 OnPointerClick 点击方法。

第一次点击时,记录点击的时间,如果第二次点击的时间,和上次点击时间的间隔非常短,则判定为双击。

csharp 复制代码
using UnityEngine;
using UnityEngine.EventSystems;

public class UIDoubleClick : MonoBehaviour, IPointerClickHandler
{
    public float doubleClickThreshold = 0.2f; // 双击的时间间隔
    float lastClickTime = 0f; // 记录上次点击的时间

    public void OnPointerClick(PointerEventData eventData)
    {
        // 获取当前点击的时间
        float currentTime = Time.time;

        // 判断两次点击时间间隔是否在阈值范围内
        if (currentTime - lastClickTime < doubleClickThreshold)
        {
            OnDoubleClick();
        }

        // 更新上一次点击的时间
        lastClickTime = currentTime;
    }

    void OnDoubleClick()
    {
        Debug.Log("双击");
    }
}

运行效果:

长按

创建脚本 UILongPress.cs,并挂载到 Image 身上。

在脚本中,继承 IPointerDownHandler 和 IPointerUpHandler 接口,实现 OnPointerDown(按下)和 OnPointerUp(抬起)方法。

按下时,记录按下的时间和按住的状态,在 Update 中检查长按的时间和状态,达到长按的时间阈值后,执行一次长按的逻辑,并把长按状态重置。

csharp 复制代码
using UnityEngine;
using UnityEngine.EventSystems;

public class UILongPress : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
    public float longPressThreshold = 1.0f; // 长按的时间阈值
    float pressStartTime; // 按下的时间
    bool isPressing = false; // 是否按住

    public void OnPointerDown(PointerEventData eventData)
    {
        isPressing = true;
        pressStartTime = Time.time;
    }

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

    void Update()
    {
        // 检查是否在长按状态
        if (isPressing && (Time.time - pressStartTime) > longPressThreshold)
        {
            OnLongPress();
            isPressing = false; // 只触发一次长按事件
        }
    }

    void OnLongPress()
    {
        Debug.Log("长按");
    }
}

运行效果:

相关推荐
可爱系程序猿9 小时前
Unity 材质预览才弹 d3dcompiler_47.dll?先分清编辑器 SDK、着色器缓存和玩家包
程序人生·3d·unity·电脑·材质
xcLeigh10 小时前
Unity基础:使用Transform控制物体缩放——localScale与lossyScale的区别
unity·游戏引擎·教程
淡海水15 小时前
00-Unity和C#的GC剖析与对比-全篇导览
unity·c#·游戏引擎·gc
字节暗面1 天前
Unity AssetBundle 热更新资源保护排查笔记
unity·游戏加固·资源加密
魔士于安7 天前
unity 丑陋哥布林 哥布林有humannoid 动画没 带动画
unity·游戏引擎·材质·贴图·模型
小贺儿开发7 天前
Unity 家居视频遥控(细节优化)
科技·unity·程序员·udp·视频·工具·通信
淡海水7 天前
13-04-面试-源码级深度追问链
数据结构·unity·面试·c#·游戏引擎·源码·il2cpp
小小数媒成员8 天前
UGUI 性能优化(详细,全,深入)
开发语言·unity·游戏引擎
林川~018 天前
Unity新输入系统使用笔记
unity·input system
小贺儿开发9 天前
Unity 结合百度AI开放平台 手写文字识别
人工智能·科技·学习·unity·云服务·文字识别·手写文字