Unity:Raycast不会击中Child Object的对撞机

时间:2017-03-03 18:14:20

标签: c# unity3d

我有一个基于磁贴的游戏。我将塔作为瓷砖的儿童对象。我希望能够通过光线投射检测塔上的鼠标点击,而不是瓷砖。瓷砖和塔都有2d箱式对撞机。我可以检测到瓷砖上的点击,但是光线投射不会检测到塔上的点击。我怎么解决这个问题。感谢。

这是我的光线投射代码:

if (Input.GetMouseButtonDown(0))
        {
            Ray ray = camera.ScreenPointToRay(Input.mousePosition);

            ray.origin = camera.transform.position;

            RaycastHit2D hit = Physics2D.Raycast(camera.transform.position, -Vector2.up, 50, 8);

            if (hit.collider != null && !EventSystem.current.IsPointerOverGameObject())
            {
                Debug.Log(hit.collider.transform.tag);
                //Transform objectHit = hit.transform;

            }
        }
    }

当我掩盖瓷砖(这里是第8层)时,我什么都没得到。虽然塔(如瓷砖)也有一个2d的盒子对撞机,但它似乎从来没有撞到过塔楼。

3 个答案:

答案 0 :(得分:0)

我建议使用3d射线而不是2d射线。也许Camera.screenPointToRay可能会出现。另外,我建议你先阅读:https://forum.unity3d.com/threads/unity-2d-raycast-from-mouse-to-screen.211708/

答案 1 :(得分:0)

只是钓鱼,但您的儿童对撞机是否可能隐藏在父母的结肠内?然后Raycast只返回第一个命中。您可以尝试RaycastAll,如下所示:

https://docs.unity3d.com/ScriptReference/Physics.RaycastAll.html

并循环浏览控制台中的所有命中,以了解您是否真正获得了对撞机。

答案 2 :(得分:0)

仅限制用于特定图层的光线投射

//get the mask to raycast against either the player or enemy layer
 int layer_mask = LayerMask.GetMask("Player", "Enemy");
 //or this would be just player
 //int layer_mask = LayerMask.GetMask("Player");

 //or this would be player, enemy or cows!
 //int layer_mask = LayerMask.GetMask("Player","Enemy","Cows");

 //do the raycast specifying the mask
 if (Physics.Raycast (ray, out hit, distance, layer_mask))
 {

 }