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

Unity3D开发之鼠标单双击判断

在开发游戏和交互式应用程序时,经常需要对用户的鼠标点击进行准确的响应。其中,单击和双击事件的判断是常见需求之一。本文将介绍如何在Unity中优雅地实现鼠标单双击判断,使代码结构清晰、易读、易维护。

背景

在许多项目中,我们需要监测用户的鼠标点击事件,并根据单击和双击分别触发不同的操作。过去的实现方式可能会显得有些繁琐,而我们将展示一种更为简便的方法,使代码看起来更加清晰。

简单而有效的实现

首先,让我们看一下基本的鼠标点击检测实现:

float time1 = 0;
Action LeftMouseDownAction;void Update()
{if (Input.GetMouseButtonDown(0)){if (Time.realtimeSinceStartup - time1 < ConstVariable.MouseClickJudgeDelayTimer){// 处理双击事件CancelInvoke("LeftMouseDownDelayFunc");LeftMouseDownAction = null;//双击事件推送MessageCenter.Instance.DispatchMessage(InputEventId.LeftMouseDoubleDown);}else{// 处理单击事件time1 = Time.realtimeSinceStartup;//绑定单击事件LeftMouseDownAction = () => MessageCenter.Instance.DispatchMessage(InputEventId.LeftMouseDown);Invoke("LeftMouseDownDelayFunc", ConstVariable.MouseClickJudgeDelayTimer);}} 
}

上述代码通过 GetMouseButtonDown 检测左键点击,通过计时判断单击和双击事件。我设置的延迟时间为0.5s。

使用 Invoke 进行延迟调用

为了在规定的时间内判断是否发生了双击事件,我们引入了 Invoke 方法。这是一个强大而灵活的工具,用于在一定时间后执行指定的函数。以下是其在这个实现中的使用:

void LeftMouseDownDelayFunc()
{LeftMouseDownAction?.Invoke();
}

过这样的设计,我们成功地在Unity中实现了鼠标单双击判断的功能,使得代码更加简洁明了。

IPointerClickHandler接口实现方式

同时,在实现IPointerClickHandler接口中,我们也可以用此方法判断是单击还是双击。

using UnityEngine;
using UnityEngine.EventSystems;
using System;public class ClickHandler : MonoBehaviour, IPointerClickHandler
{private Action ClickAction;public void OnPointerClick(PointerEventData eventData){if (eventData.clickCount == 1 && eventData.pointerId == -1){HandleSingleClick();}else if (eventData.clickCount == 2 && eventData.pointerId == -1){HandleDoubleClick();}}private void HandleSingleClick(){ClickAction = () =>{// TODO: 处理单击事件};Invoke("ClickActionHandle", ConstVariable.MouseClickJudgeDelayTimer);}private void HandleDoubleClick(){CancelInvoke("ClickActionHandle");ClickAction = null;// TODO: 处理双击事件}private void ClickActionHandle(){ClickAction?.Invoke();}
}

总结

在本文中,我们介绍了一种在Unity中实现鼠标单双击判断的简便方法。通过对代码的轻微修改,我们使其更具可读性和模块化,同时引入了 Invoke 方法进行延迟调用。这样的设计不仅方便了代码的编写,也提高了后续的维护效率。

希望这个简单而实用的方法能够对你的项目有所帮助。如果你有任何疑问或建议,欢迎在评论区分享。感谢阅读!

相关文章:

Unity3D开发之鼠标单双击判断

在开发游戏和交互式应用程序时&#xff0c;经常需要对用户的鼠标点击进行准确的响应。其中&#xff0c;单击和双击事件的判断是常见需求之一。本文将介绍如何在Unity中优雅地实现鼠标单双击判断&#xff0c;使代码结构清晰、易读、易维护。 背景 在许多项目中&#xff0c;我们…...

openGauss学习笔记-214 openGauss 性能调优-确定性能调优范围

文章目录 openGauss学习笔记-214 openGauss 性能调优-确定性能调优范围214.1 性能因素214.2 调优范围确定 openGauss学习笔记-214 openGauss 性能调优-确定性能调优范围 数据库性能调优通常发生在用户对业务的执行效率不满意&#xff0c;期望通过调优加快业务执行的情况下。正…...

JAVA——Stream流

1.Stream流的作用&#xff08;流水线&#xff09; 结合了Lambda表达式&#xff0c;简化集合、数组的操作&#xff1b; 2.Stream流的使用步骤 ①先得到一条Stream流&#xff08;流水线&#xff09;&#xff0c;并将数据放上去&#xff1b; ②利用Stream流中的API进行各种操作…...

QXlsx Qt操作excel(1)

QXlsx 是一个用于处理Excel文件的开源C库。它允许你在你的C应用程序中读取和写入Microsoft Excel文件&#xff08;.xlsx格式&#xff09;。该库支持多种操作&#xff0c;包括创建新的工作簿、读取和写入单元格数据、格式化单元格、以及其他与Excel文件相关的功能。 关于QXlsx的…...

20240131在ubuntu20.04.6下使用whisper不同模式的比对

20240131在ubuntu20.04.6下使用whisper不同模式的比对 2024/1/31 16:07 首先你要有一张NVIDIA的显卡&#xff0c;比如我用的PDD拼多多的二手GTX1080显卡。【并且极其可能是矿卡&#xff01;】 2、请正确安装好NVIDIA最新的驱动程序和CUDA。可选安装&#xff01; 3、配置whisper…...

HTTP相关问题

目录 1.从输入URL到页面展示到底发生了什么&#xff1f; 2.HTTP状态码有哪些&#xff1f; 2.1 2XX(成功状态码) 2.2 3XX(重定向状态码) 2.3 4XX(客户端错误状态码) 2.4 5XX(服务端错误状态码) 3.HTTP 请求头中常见的字段有哪些&#xff1f; 4.HTTP和HTTPS有什么区别&…...

闲人闲谈PS之五十三——离散制造中的魔鬼--物料套裁

惯例闲话&#xff1a;最近和老婆大人商议买车事宜&#xff0c;闲人以为会陷入买油车还是电车的纠结&#xff0c;没想到老婆大人无比坚定&#xff0c;买电车。在买车这方面&#xff0c;老婆的想法居然比闲人超前。闲人对车定位在代步工具&#xff0c;2年前&#xff0c;对车还是印…...

Dell服务器iDRAC9忘记密码, 通过RACADM工具不重启 重置密码

系列文章目录 文章目录 系列文章目录前言一、RACADM工具二、linux环境1.解压安装RACADM工具测试RACADM工具重置iDRAC密码 Windows环境 前言 一、RACADM工具 RACADM工具 官网参考信息 https://www.dell.com/support/kbdoc/zh-cn/000126703/%E5%A6%82%E4%BD%95-%E9%87%8D%E7%BD…...

2024年Java架构篇之数据结构与算法面试题

2024年Java实战面试题_java 5 年 面试-CSDN博客 2024年Java架构篇之数据结构与算法面试题 1、判断一个数是否是2的N次方&#xff0c;比如2、4、8、16是6、10不是 1:01、2:10、3:011、4:100、7:0111、8:1000、15:01111、16:10000 if(n&(n-1) 0) 那么n就是2的次方 n > 1...

蓝桥杯刷题day06——平均

1、题目描述 有一个长度为n 的数组&#xff08;n 是 10 的倍数&#xff09;&#xff0c;每个数ai都是区间 [0,9] 中的整数。 小明发现数组里每种数出现的次数不太平均&#xff0c;而更改第i 个数的代价为bi&#xff0c; 他想更改若干个数的值使得这10 种数出现的次数相等&…...

MySQL分区的优缺点

前言 数据库中的分区技术为处理大规模数据提供了一种有效的手段&#xff0c;通过将数据划分成更小的可管理单元&#xff0c;我们能够提高查询性能、简化数据维护并更灵活地管理存储空间。然而&#xff0c;在采用分区时&#xff0c;我们必须认真考虑分区键的选择和实施细节&…...

2023年度总结

目录 工作读书生活展望 用一百分总结这一年&#xff0c;给自己打80分。 这一年中中常常&#xff0c;坚持踏踏实实走好每一步。 工作 项目上&#xff0c;先后经历了「从库恢复后自动上线」、「主动切换RTO优化」、「MGR高可用统一」&#xff0c;以及高可用稳定性建设等。另外&…...

aspose-words在linux上安装字体

大多数情况下,使用 Aspose.Words 将 DOC 或 DOCX 文档转换为 PDF 格式。如果需要在 Linux 计算机上执行此操作,确保 Aspose.Words 以最佳准确性渲染文档。 最常见的是,需要转换的 DOC 和 DOCX 文档是在 Windows 或 Mac OS 操作系统上使用 Microsoft Word 创建的。因此,DOC…...

SpringBoot实战项目第一天

环境搭建 后端部分需要准备&#xff1a; sql数据库 创建SpringBoot工程&#xff0c;引入对应的依赖(web\mybatis\mysql驱动) 配置文件application.yml中引入mybatis的配置信息 创建包结构&#xff0c;并准备实体类 完成今日开发后项目部分内容如下图示 用户注册于登录部分…...

C# 信号量(Semaphore)详细使用案例

文章目录 简介信号量的工作原理使用场景使用示例其他使用实例1. 数据库连接池管理2. 文件读写同步3. 生产者消费者问题4. 打印任务队列同步5. Web服务器并发请求限制 简介 在C#中&#xff0c;信号量&#xff08;Semaphore&#xff09;是.NET框架提供的一个同步类&#xff0c;位…...

《Docker极简教程》--Docker基础--Docker的基本概念

在这篇文章中我们先大致的了解以下Docker的基本概念&#xff0c;在后续的文章中我们会详细的讲解这些概念以及使用。 一、容器(Container) 1.1 容器的定义和特点 容器的定义 容器是一种轻量级、可移植的软件打包技术&#xff0c;用于打包应用及其依赖项和运行环境&#xff0c…...

【AIGC核心技术剖析】DreamCraft3D一种层次化的3D内容生成方法

DreamCraft3D是一种用于生成高保真、连贯3D对象的层次化3D内容生成方法。它利用2D参考图像引导几何塑造和纹理增强阶段&#xff0c;通过视角相关扩散模型执行得分蒸馏采样&#xff0c;解决了现有方法中存在的一致性问题。使用Bootstrapped Score Distillation来提高纹理&#x…...

新版MQL语言程序设计:外观模式的原理、应用及代码实现

文章目录 一、什么是外观模式二、外观模式的实现原理三、外观模式的应用范围四、外观模式应用实例银行系统的设计量化交易系统的设计 五、外观模式的代码实现 一、什么是外观模式 外观模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;它提供了一个…...

Docker 搭建mysql 集群(二)

PXC方案 很明显 PXC方案在任何一个节点写入的数据都会同步到其他节点&#xff0c;数据双向同步的&#xff08;在任何节点上都可以同时读写&#xff09; 创建MySQL PXC集群 1 安装PXC镜像 docker pull percona/percona-xtradb-cluster:5.7.21 2 为PXC镜像改名 docker tag pe…...

L1-018 大笨钟-java

输入样例1&#xff1a; 19:05输出样例1&#xff1a; DangDangDangDangDangDangDangDang输入样例2&#xff1a; 07:05输出样例2&#xff1a; Only 07:05. Too early to Dang. java import java.awt.desktop.SystemEventListener; import java.util.Scanner;public class M…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...