Unity多条件If语句问题排查:Shift+A组合键判断错误
问题分析
- 核心触发逻辑错误:
Input.GetKeyDown(KeyCode.XXX)仅在按键被按下的当前单帧返回true,你写的条件要求Shift(左/右)和A键必须在完全相同的一帧被按下才会触发,而普通用户按组合键的习惯都是先按住Shift,再按下A,两个按键的按下帧不可能完全对齐,因此这段代码在实际使用中几乎无法触发。 - 条件冗余:你在两个
||分支里重复写了Input.GetKeyDown(KeyCode.A)判断,完全可以提取合并,不需要重复校验。
修正方案
判断组合键的通用逻辑是:修饰键(Shift/Ctrl/Alt等)用Input.GetKey()判断是否处于按住状态,触发键用Input.GetKeyDown()判断是否刚被按下,修正后的代码如下:
if (Input.GetKeyDown(KeyCode.A) && (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift))) { print("Well done! Next Key: A"); }
你也可以直接用KeyCode.Shift同时匹配左右Shift,简化代码:
if (Input.GetKeyDown(KeyCode.A) && Input.GetKey(KeyCode.Shift)) { print("Well done! Next Key: A"); }
内容的提问来源于stack exchange,提问作者Eli Hoestje
相关产品推荐
相关产品推荐

