Unity3D 鼠标双击事件

Unity3D 鼠标双击事件总结了几种,特来记录一下!

一、 计时 Time.realtimeSinceStartup ,从开始运行到首次点击的时间、跟、开始运行到下一次点击的时间、的时间差。

    private float time;
	void Update () {
        if (Input.GetMouseButtonDown(0))
            if (Time.realtimeSinceStartup - time < 0.2f)
                Debug.Log("Double Clock");
                time = Time.realtimeSinceStartup;

二、使用Event.current.clickCount,必须写在OnGUI()中。运行后,随意双击就会执行,不需进入物体范围。

private void OnGUI()
    if (Input.GetMouseButtonDown(0) && Event.current.isMouse && Event.current.clickCount == 2)//必须写在OnGUI中
         Debug.Log("Double Click");

三、使用射线RaycastHit,设置时间间隔,从摄像机向鼠标点击的位置发射一条射线 ,并且射线检测到的物体是当前挂着该脚本的物体。(即鼠标进入物体时,双击才有效。物体要带碰撞体Collider。)

private float time;
void Update () {
  if (Input.GetMouseButtonDown(0))//鼠标左键点击,1:右键;2:中键
      RaycastHit hit;
      //向鼠标点击的位置发射一条射线 && 射线检测到的物体是当前挂着该脚本的物体
      if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit) && hit.transform == transform)
           //点击的时间间隔在0.2s内
           if ((Time.realtimeSinceStartup - time) < 0.2f)
               //要双击的物体上一定要有碰撞器,并且碰撞器和本脚本挂在同一个物体上
               Debug.Log("Double Click");
               time = Time.realtimeSinceStartup;

四、一些其他的双击,例如移动端

可参考https://blog.csdn.net/ycl295644/article/details/46816699

这篇文章就来实现UI的单击、双击、按压、拖动的不同状态判断。不定时更新Unity开发技巧,觉得有用记得一键三连哦。如果觉得本篇文章有用别忘了点个关注,关注不迷路,持续分享更多Unity干货文章。   由于项目需求,需要使用鼠标点击来实现滑动事件,查看官方文档对Input.GetMouseButton部分进行了了解。   GetMouseButton:每一帧鼠标处于按下状态都会返回true,Input.GetMouseButton(0):表示鼠标左键按下,Input.GetMouseButton(1):表示鼠标右键按下,Input.GetMouseButton(2):表示鼠标中键按下 下面举例在unity里面Canvas下面添加一个image,当鼠标移动到image点击一次触发事件 Debug.Log(“SingleClick!”);当鼠标在image点击两次触发事件 Debug.Log(“DoubleClick!”);鼠标双击和单机出现不同的响应事件在上述代码中,我们使用 lastClickTime 记录上一次单击的时间,在回调函数中计算两次单击之间的时间间隔,如果小于 doubleClickInterval,则认为触发了双击事件,否则触发了单击事件。 1、鼠标抬起时判断是否有点击到模型对象 2、鼠标抬起时会判断当前模型对象是否和落下时为同一个对象 3、鼠标按下和抬起之间的时间间隔少于220毫秒 4、鼠标落下和抬起的距离不大于10像素 二、实现原理 1、监听 EventSystem.current.IsPointerOverGameObject() == false (PC )或者 EventSystem.current.I... 当鼠标按键按下时,返回一次true,后面参数0是左键,1是右键,2是中键 if(Input.GetMouseButtonDown(0)) Debug.Log("Pressed left click."); if(Input.GetMouseButtonDown(1)) Debug.Log("Pressed right click."); if(Input.GetMouseBut...