unity双击检测(非插件)

做一个双击检测

两个思路:

一个是button按第一下,在update里面,检测 input鼠标的第二下(upodate会一直运行);
一个是根据Time实时的时间,检测两次button按下的间隔

两种双击思路都是检测两次按下的时间差,第一种不好控制时间,采用第二种,在0.3秒按下第二下就算双击

private float main_time = 0;
private float intervalTime = 0.3f;
public void ItemOnClick()
{
    //Debug.Log("点击solt");
    //BagGuiManager.instacne.itemDes.text = soltItem.des;

    if (Time.time - main_time <= intervalTime)
    {
        Debug.Log("双击");
       
    }
    else
    {
        Debug.Log("时间过长不认为双击");
        main_time = Time.time;
    }
}

把函数挂到 button上(使用脚本挂比较好,拖动有可能丢失引用,且不好找错误)

效果
在这里插入图片描述

注意:其中时间过长不认为双击, 此处不能作为单击效果 ,因为双击的第一下总是会触发单击效果,只是当第二次单击过快,会认为第二下是双击效果。

如果要单双击并存,需要再加一个检测

即0.3秒(双击检测时间)过后没有点击第二次,才认为此次是单击。此处用update做时间检测(用计时插件更好)

改进

private float intervalTime = 0.3f;

    private float realTime=0;
    private bool timeContinue=false;

    public void ItemOnClick()
    {
        //Debug.Log("点击solt");
        //BagGuiManager.instacne.itemDes.text = soltItem.des;
        if (realTime <= 0)//等于0,计时开始,结束则单击
        {
            realTime = intervalTime;
            timeContinue = true;
        }else if (realTime>0)//不等于0,说明在计时时间内,双击,停止计时
        {
            Debug.Log("双击");//
            realTime = 0;
            timeContinue = false;
        }

        
    }

    private void Update()
    {
        if (realTime>=0)//计时
        {
            realTime -= Time.deltaTime;
        }

        if (timeContinue && realTime <= 0.01)
        {
            Debug.Log("单击");//计时结束,单击
            timeContinue = false;
        }
       
    }


效果:单双击分开了,单击后做计时检测,在检测时间内,没有点击第二次算单击,点击第二次则算双击,单双击之后都会清零状态。
在这里插入图片描述

如果用计时插件(比如Timer)检测双击会更加方便。


版权声明:本文为euphorias原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。