unity的鼠标双击和移动触摸屏的双击

来源:互联网 发布:java 中final static 编辑:程序博客网 时间:2024/04/30 09:58

鼠标的双击相对比较简单,百度一下可以搜到很多,如下:

using UnityEngine;using UnityEngine.UI;using UnityEngine.EventSystems;public class MJCard : MonoBehaviour,IPointerClickHandler {    float t1;    float t2;    public void OnPointerClick(PointerEventData eventData)    {        if (eventData.clickCount == 2)        {            Debug.log("双击");        }    }}


上面是双击屏幕的事件,假如想双击某个物体呢,就要这样:

[csharp] view plain copy
  1. private bool b;  
  2. void Update(){  
  3.     if(Event.current.isMouse && Event.current.type == EventType.MouseDown && Event.current.clickCount == 2){  
  4.         if(b){  
  5.             print("double click " + transform.name);  
  6.         }  
  7.     }  
  8. }  
  9. void OnMouseEnter(){  
  10.     b = true;  
  11. }  
  12. void OnMouseExit(){  
  13.     b =false;  
  14. }  

意思就是,当鼠标进入你想点击的物体后,双击才有效果,否则鼠标未进入物体,或者exit时,b = false,双击无效果。


下面是移动设备上触屏的双击:

using UnityEngine;using UnityEngine.UI;using UnityEngine.EventSystems;public class MJCard : MonoBehaviour,IPointerClickHandler {    float t1;    float t2;    public void OnPointerClick(PointerEventData eventData)    {        t2 = Time.realtimeSinceStartup;        if (t2 - t1 < 0.2)        {            Debug.log("双击");        }        t1 = t2;    }    //或者    private float t1;  private float t2;  void Update(){      if(Input.GetMouseButtonDown(0)){          t2 = Time.realtimeSinceStartup;          if(t2 - t1 < 0.2){              print("double click");          }          t1 = t2;      }  }  }



我在一篇博客看到过移动端GetMouseButtonDown是有效果的,所以这样利用t1,t2,记录两次单击的时间间隔,假如小于0.2s,则被判断为双击。

同样,移动端点击某一确定物体的双击事件,把下面脚本赋给要点击的物体,

[csharp] view plain copy
  1. private var t1:double;  
  2. private var t2:double;  
  3. public var cam:Camera;  
  4. function Update(){  
  5.     if(Input.GetMouseButtonDown(0)){  
  6.         var ray:Ray = cam.ScreenPointToRay(Input.mousePosition);  
  7.         var hit:RaycastHit;  
  8.         if(Physics.Raycast(ray,hit)){  
  9.             if(hit.transform.name == gameObject.transform.name){  
  10.                 t2 = Time.realtimeSinceStartup;  
  11.                 if(t2 - t1 < 0.2){  
  12.                     print("double click " + transform.name);  
  13.                 }  
  14.                 t1 = t2;  
  15.             }  
  16.         }  
  17.     }  
  18. }  
参考:http://blog.csdn.net/khdhzdx/article/details/36870945
原创粉丝点击