Unity实现鼠标双击与长按的检测

 更新时间:2020年02月14日 08:12:29   作者:鲸的梦  
这篇文章主要为大家详细介绍了Unity实现鼠标双击与长按的检测,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

在unity中,我们会遇到很多的关于鼠标的事件。虽然unity中给出了相关的点击与拖拽方法,可是这些方法只对UI和碰撞体适用。那么,如何直接用代码实现鼠标的双击与长按的检测呢?
首先我们需要几个变量,用来保存时间,以判断是长按还是点击。

private float main_time;
public float click_time;
private float two_click_time;
private int count;

先来说说这些变量的用处。main_time主要是用来检测是点击了一次鼠标还是长按鼠标。click_time主要是检测第一次点击和第二次点击的间隔时间,已确定是不是双击。最后一个变量two_click_time主要是检测,如果先点击了一次,又连续点击两次,是不是接下来的两次为双击。count主要是用来计数鼠标点击次数。
为了检测鼠标的每一帧的动作,我们要把下面的代码放在Update中。

if (Input.GetMouseButton(0)){
 if (main_time == 0.0f){
  main_time = Time.time;
 }
 if (Time.time - main_time > 0.2f) {
  //长按时执行的动作放这里
 }
}
if (Input.GetMouseButtonUp(0))
  {
   if (Time.time - main_time < 0.2f)
   {//当鼠标抬起时,检测按下到抬起的时间,如果小于2.0f就判断为点击。
   
    if (two_twoClicks != 0 && Time.time - two_twoClicks < 0.2f)
    {
     count = 2;
    }
    else
    {
     count++;
     if (count == 1)
     {
      time = Time.time;
     }
    }
    if (count == 2
     && ((time != 0 && Time.time - time < 0.2f) || (two_twoClicks != 0 && Time.time - two_twoClicks < 0.2f)))
    {//如果两次点击事件小于0.2f就判断为双击
    //双击时执行的代码块
     count = 0;
    }    
    if (count == 2 && (Time.time - time > 0.2f || Time.time-two_twoClicks > 0.2f))
    {
     two_twoClicks = Time.time;
     count = 0;
    }
    main_time = 0.0f;
   }
   else
   {
    main_time = 0.0f;
   }
  }

在这段代码里,我使用了Input.GetMouse和Input.GetMouseUp.之所以没有使用Input.GetMouseDown是因为当我们点击一次鼠标时,会同时调用Input.GetMouse和Input.GetMouseDown,以至于无法判断是长按还是单击。所以我们可以只检测按下的时间,并根据按下的时间来判断鼠标的行为。可是这一大段代码很繁琐,理解起来比较费事,不过运行时的效果还是很不错的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • datagridview实现手动添加行数据

    datagridview实现手动添加行数据

    这篇文章主要介绍了datagridview实现手动添加行数据,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • C# Newtonsoft.Json用法详解

    C# Newtonsoft.Json用法详解

    本文主要介绍了C# Newtonsoft.Json用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • C#中的尾递归与Continuation详解

    C#中的尾递归与Continuation详解

    这篇文章主要介绍了C#中的尾递归与Continuation详解,本文讲解了递归与尾递归、尾递归与Continuation、Continuation的改进等内容,需要的朋友可以参考下
    2015-04-04
  • C#二分查找算法实例分析

    C#二分查找算法实例分析

    这篇文章主要介绍了C#二分查找算法,实例分析了C#二分查找的相关技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • unity实现鼠标拖住3D物体

    unity实现鼠标拖住3D物体

    这篇文章主要为大家详细介绍了unity实现鼠标拖住3D物体,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • 解析C#中[],List,Array,ArrayList的区别及应用

    解析C#中[],List,Array,ArrayList的区别及应用

    本篇文章主要是对C#中[],List,Array,ArrayList的区别及应用进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01
  • C#实现过滤html标签并保留a标签的方法

    C#实现过滤html标签并保留a标签的方法

    这篇文章主要介绍了C#实现过滤html标签并保留a标签的方法,文中的自定义函数采用正则过滤实现了该功能,是非常实用的技巧,需要的朋友可以参考下
    2014-09-09
  • c#动态调用Webservice的两种方法实例

    c#动态调用Webservice的两种方法实例

    这篇文章介绍了c#动态调用Webservice的两种方法实例,有需要的朋友可以参考一下
    2013-08-08
  • C#采用mouse_event函数实现模拟鼠标功能

    C#采用mouse_event函数实现模拟鼠标功能

    这篇文章主要介绍了C#模拟鼠标点击小功能,通过代码向大家做分析,需要的朋友可以参考下
    2015-07-07
  • WPF中窗体最大化问题的解决方法

    WPF中窗体最大化问题的解决方法

    这篇文章主要给大家介绍了关于WPF中窗体最大化问题的解决方法,文中通过示例代码介绍的非常详细,对大家学习或者使用wpf具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10

最新评论