如何找到鼠标下方的所有碰撞器?

How to find all colliders below mouse?

 public static bool IsTopmost(GameObject go)
 {
     RaycastHit[] hits;
     Vector3 wp = Camera.main.ScreenToWorldPoint(Input.mousePosition);
     wp.z = Camera.main.transform.position.z;
     hits = Physics.RaycastAll(wp, Vector3.forward, Vector3.Distance(Camera.main.transform.position, go.transform.position) * 2);

     if (hits.Length == 0)
     {
         return false;
     }

     GameObject topMostSoFar = hits[0].collider.gameObject;

     RaycastHit hit;
     for (int i = 1; i < hits.Length; i++)
     {
         hit = hits[i];

         if (Compare(topMostSoFar, hit.collider.gameObject) == -1)
         {
             topMostSoFar = hit.collider.gameObject;
         }
     }

     Debug.Log("finishes method");
     return topMostSoFar.name == go.name;
 }

我的相机position.z = -5,游戏中的所有精灵position.z = 0。这个方法永远不会结束,它总是进入第一个如果说鼠标位置下没有碰撞器.我在这里做错了什么?

编辑:事实证明我的错误非常愚蠢,我使用 Physics 而不是 Physics2D 作为 2d 对撞机。我如何检查相同的东西但使用 2d 光线投射?

解决方案是到处使用2d方法和变量类型,并且RaycastAll的方向使用Vector2.zero,除非你把它Vector2.zero它不会工作。