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

Unity中Physics2D.OverlapBox始终返回false的问题求助

解决Physics2D.OverlapBox检测无效的问题

嘿,我一眼就瞅见你代码里的关键问题啦!你调用Physics2D.OverlapBox的时候,传的是屏幕坐标的mousePosition,但这个方法需要的是世界坐标呀!

你其实已经正确计算出了世界坐标的position,但却没用到它,反而用了不匹配的屏幕坐标参数,这才导致检测无效。给你修正后的代码:

void Update () {
    if (Input.GetButtonDown("Fire1")) {
        Vector3 mousePosition = Input.mousePosition;
        mousePosition.z = 10;
        Vector2 position = Camera.main.ScreenToWorldPoint(mousePosition);
        // 把第一个参数换成转换后的世界坐标position
        bool colliderHere = Physics2D.OverlapBox(position, new Vector2(3,3), 0, roomLayer);
        Debug.Log(colliderHere ? "检测到碰撞体啦!" : "没检测到碰撞体");
    }
}

为啥会这样?

Physics2D.OverlapBox的第一个参数要求是世界空间中的盒子中心位置,而Input.mousePosition返回的是屏幕像素坐标(x/y是屏幕宽高范围的数值,z值在这里没啥意义),哪怕你给z设了10,它依然是屏幕坐标系下的数值,和世界坐标系的单位不匹配,自然找不到碰撞体。

而你用Camera.main.ScreenToWorldPoint(mousePosition)转换后的position,才是鼠标位置对应的世界空间坐标,换成这个参数后,检测逻辑就能正常工作了。

额外排查点

如果修正后还是没效果,可以检查这两点:

  • 确认roomLayer这个LayerMask是否正确设置,有没有包含目标碰撞体所在的图层
  • 调整盒子大小new Vector2(3,3),确保这个范围能覆盖到你要检测的碰撞体

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:12:05