做一个双击检测
两个思路:
一个是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 版权协议,转载请附上原文出处链接和本声明。