InputDefine 类:(公共变量、常量、枚举、事件)定义

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class InputDefine
{/// <summary>两次点击的时间间隔</summary>public const float DOUBLE_CLICK_RATE = 0.3f;/// <summary>连续按住0.5s后判定为长按</summary>public const float LONG_PRESS_SCALE = 0.5f;/// <summary>判断是否点击在UI上面</summary>public static bool IsTouchUI(){if (UnityEngine.EventSystems.EventSystem.current == null) return false;if (Application.platform == RuntimePlatform.Android || Application.platform == RuntimePlatform.IPhonePlayer){if (Input.touchCount < 1) return false;if (UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId)) return true;}else{if (UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject()) return true;}return false;}}/// <summary>输入事件类型</summary>
public enum EnumInputEventType
{/// <summary>没有事件</summary>None,/// <summary>单击</summary>Click,/// <summary>双击</summary>DoubleClick,/// <summary>滑动</summary>//Slide,/// <summary>长按</summary>LongPress,
}/// <summary>
/// 输入事件
/// </summary>
/// <param name="isTouchUI">是否触摸到UI</param>
/// <param name="keyCode">(PC端)0表示左键,1表示右键,2表示中键</param>
/// <param name="enumInputEventType">输入事件类型</param>
public delegate void DelInputEvent(bool isTouchUI, int keyCode, EnumInputEventType enumInputEventType);/// <summary>
/// 鼠标点击
/// </summary>
/// <param name="isTouchUI">是否触摸到UI</param>
/// <param name="keyCode">(PC端)0表示左键,1表示右键,2表示中键</param>
/// <param name="clickCount">连续点次数</param>
public delegate void DelClickEvent(bool isTouchUI, int keyCode, Vector2 clickPs, int clickCount);

MouseEvent 类:鼠标事件(PC端)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;/// <summary>鼠标事件</summary>
public class MouseEvent : MonoBehaviour
{public DelInputEvent onInputEventChange;public DelClickEvent onClickEvent;private MouseParam[] mouseParams = new MouseParam[] { new MouseParam(), new MouseParam(), new MouseParam() };private void Update(){addMouseInputEventTypeJudge();}/// <summary>添加</summary>private void addMouseInputEventTypeJudge(){for(int i=0;i< mouseParams.Length;i++){mouseInputEventTypeJudge(i);}}/// <summary>鼠标左键输入事件判定</summary>private void mouseInputEventTypeJudge(int mouseKeyCode){//鼠标按下if (Input.GetMouseButtonDown(mouseKeyCode)){mouseParams[mouseKeyCode].startTime = Time.realtimeSinceStartup;}//鼠标按住if (Input.GetMouseButton(mouseKeyCode)){mouseParams[mouseKeyCode].holdTime = Time.realtimeSinceStartup - mouseParams[mouseKeyCode].startTime;if (mouseParams[mouseKeyCode].holdTime >= InputDefine.LONG_PRESS_SCALE){if (onInputEventChange != null) onInputEventChange(InputDefine.IsTouchUI(),mouseKeyCode,EnumInputEventType.LongPress);}}//鼠标抬起if (Input.GetMouseButtonUp(mouseKeyCode)){if (mouseParams[mouseKeyCode].holdTime >= InputDefine.LONG_PRESS_SCALE) return;if (onInputEventChange != null) onInputEventChange(InputDefine.IsTouchUI(), mouseKeyCode,EnumInputEventType.Click);mouseParams[mouseKeyCode].t2 = Time.realtimeSinceStartup;if (mouseParams[mouseKeyCode].t2 - mouseParams[mouseKeyCode].t1 < InputDefine.DOUBLE_CLICK_RATE){//Debug.Log(mouseKeyCode + ":双击!");mouseParams[mouseKeyCode].clickCount++;if (onInputEventChange != null) onInputEventChange(InputDefine.IsTouchUI(), mouseKeyCode,EnumInputEventType.DoubleClick);}else{mouseParams[mouseKeyCode].clickCount = 1;}mouseParams[mouseKeyCode].t1 = mouseParams[mouseKeyCode].t2;if (onClickEvent != null) onClickEvent(InputDefine.IsTouchUI(), mouseKeyCode,Input.mousePosition, mouseParams[mouseKeyCode].clickCount);}}public struct MouseParam{public float startTime;public float holdTime;public float t1;public float t2;public int clickCount;}}

TouchEvent 类:触摸事件(移动端)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;/// <summary>触摸事件</summary>
public class TouchEvent : MonoBehaviour
{public DelClickEvent onClickEvent;private void Update(){if (Input.touchCount > 0){for (int i = 0; i < Input.touchCount; i++){Touch touch = Input.GetTouch(i);if (touch.phase == TouchPhase.Began){if (onClickEvent != null) onClickEvent(InputDefine.IsTouchUI(), i, touch.position, touch.tapCount);//Debug.Log(i + "---" + "touch.tapCount:" + touch.tapCount+ "---touch.position:"+ touch.position);}}}}
}

Unity 点击、双击、连击、长按 事件检测(支持PC和移动端)相关推荐

  1. Unity密室逃脱-逃离房间游戏源码.,支持安卓+IOS双端 unity2021 C#语言开发

    Unity密室逃脱-逃离房间游戏源码.,支持安卓+IOS双端 unity2021 C#语言开发.完整的源码可直接运营.拿来学习研究和二次开发都很不错. 源码下载 unity密室逃脱-逃离房间游戏源码C ...

  2. Android系统中自定义按键的短按、双击、长按事件

    在项目中碰到这样的问题: 由于系统中的按键在底层做了重新定义或者新增了按键,此时需要在APP层对按键事件(keyevent)做分解处理,模拟Android系统做法,把keyevent分解成: 1.单击 ...

  3. Unity——点击按钮或屏幕响应事件

    有时我们需要点击屏幕实时响应某事件A,但当需要点击某个按钮响应另一事件B时,也同样会带动A的响应,而我们不想A响应,此时就需要我们判断区分一下,那么就需要实时监听鼠标或手指点击的是按钮还是屏幕了. 创 ...

  4. Android 横屏启动activity,点击屏幕的单击、双击和长按事件

    横屏启动activity方法1:在androidmanyfest.xml的activity中加入属性 android:screenOrientation="landscape"方法 ...

  5. Android SubsamplingScaleImageView(subsampling-scale-image-view)单双击长按事件【系列2】

    Android SubsamplingScaleImageView(subsampling-scale-image-view)单双击长按事件[系列2] 附录参考文章1介绍了Android Subsam ...

  6. STC15单片机-按键检测单击、双击和长按(状态机)

    按键检测(状态机) 传统的按键检测 在单片机的应用中,利用按键实现与用户的交互功能是相当常见的,同时按键的检测也是很讲究的,众所周知,在有键按下后,数据线上的信号出现一段时间的抖动,然后为低,当按键释 ...

  7. Unity3D New Input System 鼠标左键单击、双击、长按配置及实现接口多态用法(一)

    前言 如果有更好的写法或是代码有什么错误等等,还请大佬教教我. 一.New Input System配置 下载安装哪些就自己搜下怎么整吧,我这就不写了,直接写怎么配置. 首先右键->创建-> ...

  8. Compose 手势事件:防止重复点击,双击,长按,全局触摸隐藏键盘

    前言 JetPack Compose (后续简称compose) release版已经出来了三四个月了,虽然没正式版之前也学过几次,但一直没有机会用,在加上api的变更,导致之前学的都忘完了,现在终于 ...

  9. Vue 框架-02-事件:点击, 双击事件,鼠标移上事件

    Vue 框架-02-事件:点击, 双击事件,鼠标移上事件 1.单击事件:v-on:click 源码 app2.js : //实例化 vue 对象 new Vue({//注意代码格式//el:eleme ...

最新文章

  1. springcloud demo---feign
  2. php框架全局自定义错误,[TP笔记]ThinkPHP自定义错误页面、成功页面及异常页面
  3. C# ASP.NET里的@妙用,字符串换行
  4. 解决VS2013中出现类似于error C4996: 'scanf': This function or variable may be unsafe的安全检查错误
  5. web前端入门学习 css(8)(新增语义化标签、video/audio、新增input类型、新增表单属性、属性选择器、结构伪类选择器、伪元素选择器、css3盒子模型、模糊、calc函数、过渡
  6. linux添加vfat分区,浅析mkfs.vfat如何在arm开发板上创建fat32独立分区
  7. 学术不端网查重靠谱吗_毕业论文查重把知网上的英文文章翻译成中文可以吗
  8. QT学习:图形视图Graphics View
  9. Jmeter响应中中文乱码怎么解决?
  10. android xml显示调整,AndroidStudio中怎么设置xml与预览同时显示?
  11. deepin win10字体_从Win10复制黑体、宋体、仿宋等字体并装到Deepin的正确方法
  12. [我叫以赏]Python获取B站UP主粉丝数
  13. if函数3个条件3个结果C语言,if函数3个条件嵌套公式 包括60为及格否则为不及格...
  14. 非接触IC卡读写模块MFRC530的工作原理及其应用
  15. 2017 多校4 Dirt Ratio
  16. 2021年危险化学品经营单位主要负责人新版试题及危险化学品经营单位主要负责人考试试题
  17. LOJ#2538. 「PKUWC2018」Slay the Spire
  18. 规则引擎 Drools:规则引擎概述
  19. Teranex Express格式转换器
  20. mysql:innodb存储引擎之表结构

热门文章

  1. 微信红包算个毛 ——微信红包,仅仅是个游戏?!
  2. html编辑dreamweaver,HTML在线编辑器不需要懂得使用Dreamweaver
  3. 鼠标箭头光标样式插件MagicMouse.js
  4. 搜索的艺术——搜索引擎使用心得
  5. C++ hpp 文件
  6. 模拟仪器仪表ActiveX(OCX)控件 - 实时曲线(RTChart)介绍及下载地址
  7. MRI血管造影技术之最大密度投影法(maximum intensity projection)重建
  8. 关于RF射频 PCB布线心得
  9. June 11th 模拟赛C T1 Sandcas Solution
  10. 调出粉色背景人像照片的Photoshop教程