Unity 2D E键输入获取问题:商店交互功能无法触发
Unity 2D商店交互E键检测失效的解决方案
问题根源
你把E键输入检测写在了OnTriggerEnter2D方法里,这个方法仅在玩家首次进入商店碰撞体的那一帧执行一次。只有刚好在碰撞触发的瞬间按下E键,代码才会输出"ENTER SHOP",这显然不符合正常的交互逻辑。
正确实现步骤
- 新增布尔变量标记玩家是否处于商店交互区域
- 在触发进入/退出事件中更新这个标记,并处理精灵切换
- 将E键检测移至
Update方法(每一帧都会执行),确保只要在区域内就能响应按键
修正后的完整代码
private bool isInShopZone = false; private void OnTriggerEnter2D(Collider2D other) { if(other.CompareTag("Shop")) { isInShopZone = true; ShopSR.sprite = ShopHighlighted; } } private void OnTriggerExit2D(Collider2D other) { if(other.CompareTag("Shop")) { isInShopZone = false; // 记得切换回商店普通精灵,比如ShopSR.sprite = ShopNormal; } } private void Update() { if (isInShopZone && Input.GetKeyDown(KeyCode.E)) { print("ENTER SHOP"); // 这里后续替换为进入商店的逻辑 } }
额外注意事项
- 确保商店的Collider2D组件已勾选Is Trigger
- 玩家对象必须带有
Rigidbody2D组件(可设置为Kinematic避免物理影响),否则触发事件不会生效 Input.GetKeyDown仅在按键按下的第一帧返回true,符合"按下E触发"的交互需求;若需按住E执行逻辑,可改用Input.GetKey
内容的提问来源于stack exchange,提问作者DatBoiChonkey
相关产品推荐
相关产品推荐

