模拟定时器解决单击和双击事件冲突

文章讨论了在Unity游戏开发中如何处理单击和双击事件,通过定义structInputData结构和使用List缓存来检测两次点击的时间间隔,以区分单击和双击,避免因延迟处理导致的交互逻辑冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题背景

有一个需求,针对单击和双击需要分别逻辑处理

分析

单击:很容易理解,在Tick里监听按键操作即可
双击:那就做个计数?怎么定义双击?

插入两个概念:
人的反应时间大概在0.2
画面至少15帧,就等于0.1
所以说画面渲染帧间隔超过0.1,人眼能识别卡顿
操作反应大概是0.2-0.4,那我们把两次点击间隔在0.3定义为双击

单击和双击冲突
如果不做处理,那点击一次必然就触发单击,那如何识别点击第一次是属于单击还是接下来的双击呢

答案是延后处理,先存起来再处理。

设计

将操作封装起来,比如定义一个struct InputData , 成员为time,表示点击时间

定义一个List模拟缓存,在Update里先收集每次点击操作,然后模拟定时器的逻辑,如果规定时间内,比如0.3秒内收集到的点击次数只有一个,那就执行单击逻辑,如果多个就执行双击逻辑

编码

using UnityEngine;
using System.Collection.Generic;

namespace View
{
	public class UIEvent
	{
		private List<InputCmd> cmds = new List<Input>(){};
		private void Update()
		{
			if(Input.GetButtonDown(0))
			{
				cmds.Add(new InputCmd{time = Time.time});
			}
			if(cmds.Count == 1)
			{
				if(Time.time - cmds[0] > 0.3)
				{
					DoSingleClick();
					cmds.Clear();
				}
			}
			else if(cmd.Count == 2)
			{
				DoDoubleClick();
				cmds.Clear();
			}
		}
	}
	
	public struct InputCmd
	{
		public float time;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值