Unity3D UI 双击和长按

embedded/2024/11/13 15:20:55/

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.ppmy.cn/embedded/137283.html

相关文章

第二章springboot核心配置与注解

本章学习的目标 2.1 全局配置文件 全局配置文件能对默认配置值进行修改&#xff0c;下面介绍两种全局配置文件&#xff1a; 2.1.1 application.properties配置文件 springboot项目启动时会自动启动这个配置文件&#xff0c;我们可以在这个文件中配置相关属性&#xff0c;&…

minio 分布式

方案设计 需要5台服务器&#xff0c;一台nginx用作分发请求&#xff0c;4台minio服务器&#xff0c;每个minio服务器上至少2个盘。在这个方法中&#xff0c;我使用了lvm的缓存&#xff0c;在同种固态盘的情况下&#xff0c;可以使读性能提高数倍到十倍&#xff0c;使写性能提高…

音视频入门基础:MPEG2-TS专题(4)——使用工具分析MPEG2-TS传输流

一、引言 有很多工具可以分析MPEG2-TS文件/流&#xff0c;比如Elecard Stream Analyzer、PROMAX TS Analyser、easyice等。下面一一对它们进行简介&#xff08;个人感觉easyice功能更强大一点&#xff09;。 二、Elecard Stream Analyzer 使用Elecard Stream Analyzer工具可以…

【专题】2024年全球生物医药交易报告汇总PDF洞察(附原数据表)

原文链接&#xff1a;https://tecdat.cn/?p38191 在当今复杂多变的全球经济环境下&#xff0c;医药行业正面临着诸多挑战与机遇。2024 年&#xff0c;医药行业的发展态势备受关注。 一方面&#xff0c;全球生物医药交易活跃&#xff0c;2021 - 2023 年的交易中&#xff0c;已…

简单的TCP程序

文章目录 3. TCP程序3.1 接口3.1.1 inet_aton()3.1.2 listen()3.1.3 现在的服务器代码3.1.4 accept()3.1.5 inet_ntop()3.1.6 tcpClient.cc 3.2 并发的 tcpServer3.2.1 多进程版本3.2.2 多线程版本3.2.3 线程池版本 3.3 继续完善3.3.1 增加客户端重连功能3.3.2 守护进程 3. TCP…

ReactOS 4.2 OBJECT_TYPE_INITIALIZERj结构体的实现

Windows内核为新对象类型的定义提供了一个全局的OBJECT_TYPE_INITIALIZER 数据结构,作为需要填写和递交的“申请单”: OBJECT_TYPE_INITIALIZER // // Object Type Initialize for ObCreateObjectType // typedef struct _OBJECT_TYPE_INITIALIZER {USHORT Length;BOOLEAN Us…

测绘程序设计|C#运算符与Math类|注意事项

由于微信公众号改变了推送规则&#xff0c;为了每次新的推送可以在第一时间出现在您的订阅列表中&#xff0c;记得将本公众号设为星标或置顶喔~ 简单介绍了C#运算符与Math类&#xff0c;强调了易错点~ &#x1f33f;前言 运算符&#xff0b;Math类&#xff0c;便可以完成绝大部…

九、HttpMessageConverter

文章目录 1. RequestBody2. RequestEntity3. ResponseBody4. SpringMVC处理json5. SpringMVC处理ajax6. RestController注解7. ResponseEntity 1. RequestBody 2. RequestEntity 3. ResponseBody 4. SpringMVC处理json 5. SpringMVC处理ajax 6. RestController注解 7. Response…