问题
在Unity旧的输入系统InputManager,只提供接口Input.GetButton()、GetButtonDown()、GetButtonUp()这三种对按键状态的判断。缺少对Click行为的判断。
解决方法
设置一个threshold作为click行为的判定时间
依靠GetButtonDown和GetButtonUp之间计时来做判断
在Update中:
private static bool isComfirmButtonClicked;
public static bool IsComfirmButtonClicked
{
get => isComfirmButtonClicked;
}
[SerializeField] private float clickThreshold = 0.2f;
private float timer;
private bool hasButtonDown;
private const string SUBMITBUTTON = "Submit";
private void Update()
{
if (Input.GetButtonDown(SUBMITBUTTON))
{
hasButtonDown = true;
timer = 0;
}
if (!hasButtonDown)
{
isComfirmButtonClicked = false;
return;
}
else
{
timer += Time.deltaTime;
if (timer >= clickThreshold)
{
isComfirmButtonClicked = false;
}
else
{
if (Input.GetButtonUp(SUBMITBUTTON))
{
hasButtonDown = false;
isComfirmButtonClicked = true;
}
}
}
}