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

游戏开发:动画播放时如何临时禁用按键?解决X键连按问题

解决连续按X键重复扣除修复数量的问题

核心问题是没在修复流程中加状态锁,导致快速按键时多次触发扣除逻辑。别用固定延迟,「状态标记+动画事件」的方案最靠谱,具体步骤如下:

  • 加一个布尔变量标记当前是否正在修复,比如isRepairing,初始为false
  • 检测X键输入时,先判断isRepairing:如果是true直接跳过,不执行任何修复逻辑
  • 触发修复时立刻把isRepairing设为true,彻底拦住重复触发
  • 等修复动画完全播放完毕、数量更新、物品销毁这些流程都走完后,再把isRepairing设回false

以Unity为例,推荐用动画事件绑定修复完成的逻辑,比固定延迟精准(毕竟动画时长可能调整)。给你个实际代码示例:

private bool isRepairing = false;
public Animator playerAnim;
public Text remainingCountText;
public GameObject currentDamagedItem;
private int remainingRepairs = 3; // 示例初始待修复数量

void Update()
{
    // 只有不在修复状态时,才响应X键
    if (Input.GetKeyDown(KeyCode.X) && !isRepairing)
    {
        StartRepairProcess();
    }
}

void StartRepairProcess()
{
    isRepairing = true;
    // 触发修复动画
    playerAnim.SetTrigger("PlayRepairAnim");
}

// 这个方法绑定到修复动画的最后一帧(动画事件)
void OnRepairFinish()
{
    // 更新剩余数量
    remainingRepairs--;
    remainingCountText.text = $"待修复:{remainingRepairs}";
    
    // 销毁当前损坏物品
    Destroy(currentDamagedItem);
    
    // 解锁状态,允许下一次修复
    isRepairing = false;
    
    // 检查获胜条件
    if (remainingRepairs <= 0)
    {
        // 这里写你的获胜逻辑,比如弹出提示、切换场景
        Debug.Log("全部修复完成!");
    }
}

之前用延迟没效果,大概率是延迟时间设短了,或者没在延迟期间锁住状态。用动画事件能完美对齐动画结束的时机,而且状态锁全程拦住重复触发,从根源解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:00:43