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

运行效果:

长按

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/914243.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络——SDN

分布式控制路由 集中式控制路由

深入浅出rust内存对齐

在 Rust 中&#xff0c;内存对齐是一个重要的概念&#xff0c;它涉及到数据在内存中的存储方式&#xff0c;以及如何优化内存访问的效率。往往一门语言的内存布局以及对齐方式决定了一门语言的性能&#xff0c;因此学会并深入理解rust中内存布局会让我们写出高性能的rust代码&a…

ARM64环境使用docker-compose进行ElasticSearch8集群部署

环境规划 主机IP系统ES版本CPU架构用户名密码192.168.174.18Ubuntu 22.04.4 LTSelasticsearch:8.10.4ARM64elasticllodyi4TMmZD192.168.174.218Ubuntu 22.04.4 LTSelasticsearch:8.10.4ARM64192.168.174.112Ubuntu 22.04.4 LTSelasticsearch:8.10.4ARM64 概念&#xff1a; no…

28.医院管理系统(基于springboot和vue)

目录 1.系统的受众说明 2. 相关技术和开发环境 2.1 相关技术 2.1.1 Java语言 2.1.2 HTML、CSS、JavaScript 2.1.3 Redis 2.1.4 MySQL 2.1.5 SSM框架 2.1.6 Vue.js 2.1.7 SpringBoot 2.2 开发环境 3. 系统分析 3.1 可行性分析 3.1.1 经济可行性 3.1.2 技术…

高性能分布式缓存Redis-高可用部署

一、主从架构搭建 为什么要进行主从架构搭建&#xff0c;一台redis不行吗&#xff1f; ①、持久化后的数据只在一台机器上&#xff0c;因此当硬件发生故障时&#xff0c;比如主板或CPU坏了&#xff0c;这时候无法重启服务器&#xff0c;有什么办法可以保证服务器发生故障时数…

Profinet转CanOpen网关连接与CanOpen协议磁轨道实现高效连接

该项目旨在展示如何通过开疆智能Profinet转Canopen网关实现西门子1200PLC与磁轨道之间的连接。以下是项目实施的步骤概要&#xff1a;安装必要的GSD文件到西门子组态软件中&#xff0c;确保系统能够识别并使用Profinet转Canopen网关设备。 进行设备配置&#xff0c;包括将PLC和…

openai Realtime API (实时语音)

https://openai.com/index/introducing-the-realtime-api/ 官方demo https://github.com/openai/openai-realtime-console 官方demo使用到的插件 https://github.com/openai/openai-realtime-api-beta?tabreadme-ov-file 装包配置 修改yarn.lock 这个包是从github下载的 &q…

Docker--Docker是什么和对Docker的了解

Docker 的本质 Docker的本质是LXC&#xff08;Linux容器&#xff09;之类的增强版&#xff0c;它本身不是容器&#xff0c;而是容器的易用工具。 Docker通过虚拟化技术&#xff0c;将代码、依赖项和运行环境打包成一个容器&#xff0c;并利用隔离机制来使得容器之间互相独立、…

【报错记录】Steam迁移(移动)游戏报:移动以下应用的内容失败:XXX: 磁盘写入错误

前言 由于黑神话悟空&#xff0c;导致我的2TB的SSD系统盘快满了&#xff0c;我又买了一块4TB的SSD用来存放游戏&#xff0c;我就打算把之前C盘里的游戏移动到D盘&#xff0c;结果Steam移动游戏居然报错了&#xff0c;报的还是“磁盘写入错误”&#xff0c;如下图所示&#xff…

攻防世界37-unseping-CTFWeb

攻防世界37-unseping-CTFWeb <?php highlight_file(__FILE__);class ease{private $method;private $args;function __construct($method, $args) {$this->method $method;$this->args $args;}function __destruct(){if (in_array($this->method, array("…

LabVIEW 版本控制

在软件开发中&#xff0c;版本控制系统&#xff08;VCS&#xff09; 是管理代码版本变化的核心工具。对于 LabVIEW 用户&#xff0c;虽然图形化编程带来高效开发体验&#xff0c;但由于其特有的二进制 VI 文件格式&#xff0c;传统文本比较工具无法直接用于 LabVIEW 项目。这时…

Cesium着色器的创意和方法(五——Polyline)

不接受反驳&#xff0c;线段在三维里面的渲染比多边形的渲染更复杂。因为线是没有宽度的&#xff0c;并且还需要时时刻刻向着你。 首先看下Cesium的线段的一些效果。这条线段非常宽&#xff08;20个像素&#xff09;&#xff0c;有两个需要留意观察的。一是线段并非实时面对我…

独立开发者赚钱心法

一、独立开发者的身份转变 开发者到多重角色&#xff1a;独立开发者不仅是程序员&#xff0c;还是产品经理、设计师、文案、销售、运营、客服&#xff0c;最重要的是成为“老板”。思维转变&#xff1a;将开发程序视为一门生意&#xff0c;而非单纯的技术实现。 二、赚钱的核…

Hook小程序

下载&#xff1a; https://github.com/JaveleyQAQ/WeChatOpenDevTools-Python 配置&#xff1a; pip install -r requirements 实现&#xff1a; 开启小程序开发者模式&#xff0c;类似浏览器F12 效果&#xff1a; 使用&#xff1a; 退出微信&#xff0c;进入安装的目录…

【Spring Security系列】10分钟实现 SpringSecurity + CAS 完美单点登录方案

作者&#xff1a;后端小肥肠 &#x1f347; 我写过的文章中的相关代码放到了gitee&#xff0c;地址&#xff1a;xfc-fdw-cloud: 公共解决方案 &#x1f34a; 有疑问可私信或评论区联系我。 &#x1f951; 创作不易未经允许严禁转载。 姊妹篇&#xff1a; 【Spring Security系列…

Spring Boot编程训练系统:构建可扩展的应用

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了编程训练系统的开发全过程。通过分析编程训练系统管理的不足&#xff0c;创建了一个计算机管理编程训练系统的方案。文章介绍了编程训练系统的系统分析部分&…

提升AI性能的关键大型语言模型(LLM)压缩策略

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

「IDE」集成开发环境专栏目录大纲

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「IDE」集成开发环境&#x1f4da;全部专栏「Win」Windows程序设计「IDE」集成开发环境「UG/NX」BlockUI集合「C/C」C/C程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「UG/NX」NX定…

关于 npm 更新镜像源问题

npm&#xff08;Node Package Manager&#xff09;&#xff0c;是一个NodeJS包管理和分发工具&#xff0c;已经成为了非官方的发布Node模块&#xff08;包&#xff09;的标准。&#xff09; 查看当前npm版本 npm -v 10.9.0 执行以下命令报错 npm install --registryhttp…

Worldly平台更新Higg FEM 2024模块价格及购买指南

近日&#xff0c;LEVERAGE供应链管理从美国可持续服装联盟&#xff08;Cascale&#xff09;验证官方Worldly平台模块订阅更新中获悉&#xff0c;FEM2024模块价格更新的重要信息。此次更新涉及工厂环境模块&#xff08;FEM&#xff09;和工厂社会劳工模块&#xff08;FSLM&#…