2017-03-03 3 views
0

私はタイルベースのゲームを持っています。タイルの子オブジェクトとしてタワーを配置します。レイキャスティングを使ってタイルではなくタワーでマウスクリックを検出できるようにしたい。タイルとタワーの両方に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ボックスのコライダーが付いていますが、光線が塔に当たらないようです。

+0

あなたは上のクリックを検出したい子オブジェクトのですか? – Programmer

+0

レイヤー9上にある@Programmer –

答えて

0

あなたの子供のコライダーが親のコライダーの中に隠されている可能性はありますか? 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)) 
{ 

} 
関連する問題