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
相关产品推荐
相关产品推荐

