游戏开发:动画播放时如何临时禁用按键?解决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
相关产品推荐
相关产品推荐

