2017-03-03 50 views
0

我有一个基于图块的游戏。我把塔作为瓷砖的子对象。我希望能够通过光线投射来检测塔上的鼠标点击,但不能检测到瓦片。瓷砖和塔都有2d盒子对撞机。我可以检测瓷砖上的点击,但光线投射不会检测到塔上的点击。我怎么解决这个问题。谢谢。Unity:Raycast不会击中子对象的对撞机

这里是我的光线投射代码:

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箱对撞机。

+0

什么层要检测点击子对象的光线投射? – Programmer

+0

它在9 @Programmer层上 –

回答

0

只是钓鱼,但是不可能你的孩子对撞机隐藏在父亲的colider里面吗? Raycast然后只会返回第一个命中。您可以尝试RaycastAll如下记载:

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

和遍历控制台中的所有命中知道,如果你实际上得到撞机与否。

0

只是限制了specfic层

//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)) 
{ 

}