You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中Backspace按键触发函数重复执行的问题排查

问题原因及解决方案

核心问题分析

你的代码存在两个致命逻辑错误,导致冷却机制完全失效:

  1. 冷却倒计时未持续更新
    你把timeUntilNextPress -= Time.deltaTime放在了ProcessBackspace函数里,只有按下Backspace时才会执行这行代码。但冷却倒计时需要每帧持续递减,不管有没有按键操作。原逻辑下,只要不按Backspace,冷却时间就会停滞,永远无法完成倒计时;而按住按键时,连发触发的多次调用只会每次减去极小的单帧时间,根本起不到冷却效果。

  2. 系统按键连发的叠加影响
    Windows默认的按键连发功能会让按住Backspace时,Unity连续触发多次GetKeyDown事件。原逻辑中,第一次触发会设置冷却时间,但后续的连发调用会在短时间内反复尝试执行逻辑,直到AllGamesMoves为空——本质上冷却机制完全没生效。

另外,你尝试的Thread.Sleep(1000)是错误用法:Unity主线程被阻塞后,Time.deltaTime会变为0,冷却时间根本无法递减,还会导致游戏卡顿。

修复后的代码示例

把冷却倒计时移到Update每帧循环中,将冷却更新和按键检测解绑:

void Update()
{
    // 每帧持续更新冷却时间,不受按键操作影响
    if (timeUntilNextPress > 0)
    {
        timeUntilNextPress -= Time.deltaTime;
    }

    // 仅在按键按下、冷却完成、有可撤销操作时执行核心逻辑
    if (Input.GetKeyDown(KeyCode.Backspace) 
        && timeUntilNextPress <= 0 
        && chessBoard.AllGamesMoves.Count > 0)
    {
        timeUntilNextPress = cooldown;
        Debug.Log("Activated");
        // 你的核心业务逻辑...
    }
}

额外优化建议

如果想彻底避免系统按键连发的影响,可以改用Input.GetKeyUp(松开按键时触发一次),或者在执行核心逻辑后临时禁用输入检测,直到冷却完成。

内容的提问来源于stack exchange,提问作者maxi_in_a_taxi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 21:20:59