当前位置: 首页 > article >正文

Unity3D UI 双击和长按

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

UI 双击和长按

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

双击

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

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

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

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 身上。

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

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

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("长按");
    }
}

运行效果:

长按


http://www.kler.cn/a/390857.html

相关文章:

  • 万字长文分析函数式编程
  • 设计模式:工厂方法模式和策略模式
  • 数据结构与算法-前缀和数组
  • Ue5 umg学习(一)
  • Oracle OCP认证考试考点详解082系列16
  • 软考:去中心化的部署有什么特点
  • uni-app上拉加载更多⑩
  • 掌握 Java 集合框架:从基础到高级的全面指南
  • 量化交易系统开发-实时行情自动化交易-3.4.2.Okex行情交易数据
  • MySQL 常见时间字段设置
  • class com.alibaba.fastjson2.JSONObject cannot be cast to class com.ruoyi.sys
  • Redhat8.6安装JDK1.8
  • Docker--Docker是什么和对Docker的了解
  • 【实验10】卷积神经网络(1)卷积算子
  • H5移动端预览PDF方法
  • leetcode61:旋转链表
  • DolphinDB 与南方科技大学联合授课啦!
  • LeetCode 457.环形数组是否存在循环
  • 学习python的第八天之数据类型——list列表
  • 《青牛科技GC6150:摇头机驱动芯片的卓越替代品,超越 TMI8150》
  • 设计模式-七个基本原则之一-单一职责原则 + SpringBoot案例
  • ubuntu22.04 安装FFmpeg,并进行视频的转化格式和裁剪
  • 信创替代步入快车道|暴雨助力实现信创替代目标
  • ArkTS的进阶语法-1(泛型,工具类型,空安全)
  • 基于Cocos Creator开发的打砖块游戏
  • 基于STM32的智能家居安防系统设计