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

Unity 2D E键输入获取问题:商店交互功能无法触发

Unity 2D商店交互E键检测失效的解决方案

问题根源

你把E键输入检测写在了OnTriggerEnter2D方法里,这个方法仅在玩家首次进入商店碰撞体的那一帧执行一次。只有刚好在碰撞触发的瞬间按下E键,代码才会输出"ENTER SHOP",这显然不符合正常的交互逻辑。

正确实现步骤

  1. 新增布尔变量标记玩家是否处于商店交互区域
  2. 在触发进入/退出事件中更新这个标记,并处理精灵切换
  3. 将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 22:12:15