2017-03-03 19 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)) 
{ 

}