如何找到鼠标下面的所有对撞机?

时间:2015-01-02 08:26:49

标签: unity3d raycasting

 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,游戏中的所有精灵位置.z = 0.此方法永远不会完成,它总是进入第一个,如果它说鼠标位置下没有碰撞器。我在这做错了什么?

编辑:事实证明我的错误是非常愚蠢的,我使用物理而不是物理2D来进行2d对撞机。如何使用2d光线投射检查相同的内容?

1 个答案:

答案 0 :(得分:1)

解决方案是在所有地方使用2d方法和变量类型,并使用Vector2.zero指向RaycastAll的方向,除非你把Vector2.zero放进去; s不能工作。